详解原生的基于XML配置的SpringMVC

一、搭建建一个SpringMVC项目

springboot请求xml报文 springmvc xml报文_spring

二、详解web.xml:
<?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">
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <!--1、配置前端控制器-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <!--2、配置SpringMVC配置文件的路径-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
       <!--3、保证前端控制器的加载的级别是最高的-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--4、指定请求的匹配-->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

1、SpringMVC的前端控制器,最核心的,实际上也是一个servlet,没有它,SpringMVC工作不了。 DispatcherServlet继承自FrameworkServlet,如图:

springboot请求xml报文 springmvc xml报文_xml_02


2、name名称写为contextConfigLocation是固定写法,因为它是FrameworkServlet这个类中的一个属性,若是书写错误,将会出问题:

springboot请求xml报文 springmvc xml报文_spring_03


3、若容器中有多个servlet,为了保证最核心的前端控制器首先被加载,需要配置一个优先级标签。

4、这里请求的路径可以有好多种配置形式,比如:*.do, *.action, / 等等,这里配置的“ .do”的形式,意思是说只要是发送过来的是以“.do”结尾的这种请求,就都会拦截,交给 DispatcherServlet处理。若是这里配置的是“/”,则意思是发送过来的所有请求都拦截,但是这样会有问题,那就是你的静态资源也会拦截到,稍后再说。接上,请求交给DispatcherServlet后,它将会在SpringMVC的配置文件中去读取,配置文件中配置了一个bean,它的id是“/hello.do”,而我们配置的请求路径也是“ *.do”,因此,前端控制器 会将这个请求交给当前的这个controller “HelloSpringMVC”来处理。之后,请求执行到了“HelloSpringMVC”,最终跳转到“/WEB-INF/jsp/show.jsp”这个页面。请求执行如下:

springboot请求xml报文 springmvc xml报文_MVC_04


若是请求路径配置为“/”,请求 执行如下:

springboot请求xml报文 springmvc xml报文_spring_05


springboot请求xml报文 springmvc xml报文_spring_06

三、详解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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <!--1、配置一个Handler-->
    <bean id="/hello.do" class="com.controller.HelloSpringMVC"></bean>
</beans>

这里id="/hello.do" 相当于注解配置中的 @RequestMapping("/hello")。

四、创建一个controller

1、相当于在SpringMVC配置文件中注册了一个controller

public class HelloSpringMVC implements Controller {

    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        //装载模型数据和逻辑视图
        ModelAndView modelAndView = new ModelAndView();
        //添加模型数据
        modelAndView.addObject("name","yunzhongmangbu");
        //添加逻辑视图
        modelAndView.setViewName("/WEB-INF/jsp/show.jsp");
        return modelAndView;
    }
}
五、详解视图解析器

假设现在有10个controller,那么我们需要在里面配置返回视图的路径都将是如下的形式,代码冗余:

springboot请求xml报文 springmvc xml报文_MVC_07


若是此时需要更改jsp文件的存放路径,那势必会牵一发而动全身,所有文件中的路径都要修改,极为不便,所有我们使用SpringMVC给我们提供的视图解析器来配置,优化代码。

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

    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <!--前缀:视图的存放路径-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
       <!--后缀:视图的扩展名-->
        <property name="suffix" value=".jsp" />
    </bean>
    <!--配置一个Handler-->
    <bean id="/hello" class="com.controller.HelloSpringMVC"></bean>
</beans>

此时的controller中的视图的配置就简洁多了,以后要是修改路径,只需要在SpringMVC的配置文件中修改视图解析器中的前缀后缀就可以了,方便了许多:

springboot请求xml报文 springmvc xml报文_spring_08


补充一下:

web项目开发下WEB-INF目录是被保护起来的,其下的jsp页面不能直接运行,一般我们把页面、css、js、img等文件放置在webapp目录下

六、配置一个index.jsp

我们可以在web.xml中配置一个index.jsp首页,当我们直接访问工程的路径时,将会跳转至此页面:

<?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">
    <!--设置工程首页-->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

index.jsp要放置在工程的根目录webapp下面:

springboot请求xml报文 springmvc xml报文_springboot请求xml报文_09