2 - 配置一个SpringMVC项目(xml配置文件的方式)

配置一个SpringMVC项目(xml配置文件的方式) —— 具体步骤:

首先是pom.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zhoulz</groupId>
    <artifactId>springmvc_helloworld</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--创建SpringMVC,首先是pom依赖的导入:依赖 Servlet 和 Web -->

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>

        <!--导入下面spring-web、spring-webmvc两个依赖后,右侧就已经有了 spring-context 的包,所以上面其实就可以不用再导了-->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
        <!--注: 最核心的处理类在左侧的库:Maven:org.springframework:spring-webmvc:5.2.3.RELEASE\spring-webmvc-5.2.3.RELEASE.jar!\org\springframework\web\servlet\DispatcherServlet.class-->

        <!--然后,就可以在web下WEB-INF下的web.xml配置文件中配置servlet了-->

    </dependencies>

</project>

接着,在web下WEB-INF下的 web.xml配置文件 中配置servlet:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--配置前端控制器DispatcherServlet-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

        <!--由于SpringMVC也是依托于Spring的,而Spring都会建一个xml文件,用于注册一些bean对象-->
        <!--所以这里,要指定初始化的参数:-->

        <!--设置初始化参数,指定默认的springmvc的配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value> <!--没创建springmvc.xml配置文件前会报红-->
        </init-param>

    </servlet>

    <!--添加前端控制器对应的mapping映射:
            映射所有的请求,因此最好写成 /    (和/*是有区别的)
    -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

然后,现在controller下创建一个类: HelloController——结合下面的springmvc.xml配置文件看

package com.zhoulz.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloController implements Controller {

    /*public void hello(){
        System.out.println(this.getClass().getName()+"------");
    }*/

    //实现Controller接口后,会默认调用如下的处理方法(上面的hello()方法就不用了),进行处理

    /*public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        //调用该方法后,上面的servlet会报错,是因为缺jar包:tomcat下lib下的两个jar包:jsp-api.jar、servlet.api.jar
        return null;
    }*/
    //进行了一定的简化:
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
       //注意:返回值是ModelAndView

        //加一句话,用来表明进到这个方法里面了
        System.out.println(this.getClass().getName()+"-----------");

        //1、创建对象
        //所以要创建一个ModelAndView对象:
        ModelAndView mv = new ModelAndView();

        //2、添加视图名称,即要跳转的页面的名称
        //设置跳转页面的名称
        mv.setViewName("hello");

        //3、向前端页面添加的属性值
        //然后,再往里面写一些属性值
        mv.addObject("hello","hello,springmvc");
        //然后把这个对象值返还回去
        //return null;
        return mv;
    }

}

然后,对应web.xml配置文件,在resources下创建一个springmvc.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--这里,要进行一系列的配置:    **xml的配置方式**     -->

    <!--1、定义扫描包 —— 这里没必要用,因为没有配置注解,现在这里是配置xml文件的方式-->
    <!--<context:component-scan base-package="com.zhoulz"></context:component-scan>-->

    <!--2、加入刚才定义的 HelloController类:-->
    <!--<bean id="helloController" class="com.zhoulz.controller.HelloController"></bean>-->
    <bean id="/hello" class="com.zhoulz.controller.HelloController"></bean> <!--这里是项目发请求失败后进行的修改-->
    <!--配置完上面的HelloController类后,那么现在,
        怎么去映射当前这个方法(hello()方法)里的对应的请求? :hello()方法这个地方,是没办法进行一个最基本的映射的。
      因此要用xml配置文件 这样的方式的话,HelloController类这里,必须要实现对应的一个接口Controller(注意哪个包下的)
    -->

    <!--配置一个额外的组件:-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--里面还有一些属性值:—— 分别代表发送请求的前缀和后缀-->
        <!--前缀是啥?:即放在哪个目录下了,见value-->
        <property name="prefix" value="/WEB-INF/page/"></property>
        <!--后缀即为:.jsp-->
        <property name="suffix" value=".jsp"></property>
        <!--这样配置,即加上这样的前缀和后缀之后,才能找到WEB-INF下page下的hello.jsp文件-->
    </bean>

</beans>

然后,我们可以在web下WEB-INF下创建一个(Directory)目录:page,然后再page下创建一个hello.jsp文件

<%--
  Created by IntelliJ IDEA.
  User: dicfin
  Date: 2022/11/10
  Time: 15:56
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
欢迎加入xiaozhou
${hello} <%--把刚才写的hello拿过来--%>
</body>
</html>

现在,能找到对应页面的请求吗?

启动一下项目看看: (记得添加Tomcat配置,具体见上篇文章)

发请求的话,能跳转到页面吗?

发什么请求?—— 此时的请求不能随便写了。

注意,在配置springmvc.xml配置文件的时候,我们配了一个 helloController(即对应controller下的HelloController 类),然后我们找一下它返回对应的结果值是啥。

项目启动后,会自动跳转浏览器:

然后,我们就可以发请求了,发一个 hello :(即,在网页地址后面输入:hello)

发现,出错了:

错误如下:

javax.servlet.ServletException: 实例化Servlet类[org.springframework.web.servlet.DispatcherServlet]异常

以及

java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

 即:找不到当前这个类了。

这是我们在使用IDEA时需要严格注意的一个问题:

我们最终生成的目录Artifacts,点开WEB-INF,发现没有我们所需要的类:

 怎么办?解决如下:

Artifacts下,选中WEB-INF,右击 Create Directory ,创建 lib 目录,然后选中lib,右击:

 然后,将下面的全部导进来:

 完成以上操作后,重新启动项目,发出请求:

同样,发一个 hello请求,发现,没有效果,又报错了

 其中,404表示找不到对应的资源文件,即找不到我们对应的请求

是没有配置请求吗?

:其实我们是配置了请求的,就在springmvc.xml配置文件下,配了一个bean:

<bean id="helloController" class="com.zhoulz.controller.HelloController"></bean>

在默认情况下,所对应的bean就是我们要发送请求的名称。

这里,我们将上面的id名改为: /hello  ——   /  不能少

<bean id="/hello" class="com.zhoulz.controller.HelloController"></bean>

重新运行,重新发请求 hello,发现,继续报错:

500  ——  是服务器内部错误

 但是,运行结果中,我们用来验证的一句话 —— 打印了。

分析:

500  ——  是服务器内部错误

而且,上面的错误:

Circular view path [hello]: would dispatch back to the current handler URL [/springmvc_helloworld_war_exploded/hello] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.

其实这个错误表示的意思非常简单,即:

我们最终是要返回到一个页面(即hello页面,因为前面设置的:mv.setViewName("hello");)里去的,但是当前这个hello页面,我们找不到当前这个路径了。

怎么办?:需要我们在springmvc.xml配置文件中,再配置一个额外的组件:

<!--配置一个额外的组件:-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--里面还有一些属性值:—— 分别代表发送请求的前缀和后缀-->
        <!--前缀是啥?:即放在哪个目录下了,见value-->
        <property name="prefix" value="/WEB-INF/page/"></property>
        <!--后缀即为:.jsp-->
        <property name="suffix" value=".jsp"></property>
        <!--这样配置,即加上这样的前缀和后缀之后,才能找到WEB-INF下page下的hello.jsp文件-->

然后重新运行,重新发请求 hello,结果如下:

 运行正常。

上面是xml配置文件的方式,十分麻烦,后面多为注解的方式。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值