《SpringMVC从入门到放肆》二、SpringMVC的执行流程及默认配置

上一篇博文我们做了一个hello world的程序,并且已经成功的跑起来了。这一篇我们来深入的了解一下SpringMVC的执行流程以及一些其它的配置。

一、执行流程

来解释一下上图中的各个名词
1、DispatcherServlet:SpringMVC的中央调度器,负责所有任务的调度。
2、HandlerMapping:处理器映射器
3、HandlerAdapter:处理器适配器
4、Handler:处理器(咱们自己写的Controller)
5、ViewResolver:视图解析器
6、View:视图
流程:
当用户在浏览器中提交请求后首先进入我们的中央调度器,由中央调度器依次调用上图中的2、3、6、7步然后再返回到客户端。
2步骤:由中央调度器将请求交给处理器映射器,从而在处理器映射器中得到requestMapping和类的对应关系。
3步骤:中央调度器得到requestMapping和类的对应关系后,将该关系Map交给处理器适配器,由处理器适配器来调用具体的requestMapping对应的类的handleRequest方法。并在handleRequest方法执行后,返回给处理器适配器一个ModelAndView对象。
6步骤:中央调度器得到ModelAndView对象后,将ModelAndView对象交给ViewResolver视图解析器来进行视图的解析,将ModelAndView中的Model放到requestScope中。
7步骤:中央调度器进行视图渲染,渲染后并返回给用户。

二、DispatcherServlet默认配置
很多人可能会问了,既然HandlerMapping、HandlerAdapter、ViewResolver这些在SpringMVC中扮演的角色这么重要,为什么我们并没有用到呢。甚至在配置里也并没有进行配置。其实就算我们不配置,SrpingMVC也有自己一套默认的配置。具体在spring-webmvc-4.3.9.RELEASE.jar中有个DispatcherServlet.properties的配置文件。如下图:

注意:在上图中Key是SpringMVC的接口,后面是该接口在运行时需要加载的具体实现类。如果没有进行配置HandlerMapping、HandlerAdapter、ViewResolver则按该配置上的默认方式进行加载与执行。

三、配置视图解析器
来看我们的MyController,里面有

mv.setViewName("/WEB-INF/jsp/welcome.jsp");

如果我们的系统中Controller有很多,每一个都这样来写,那/WEB-INF/jsp/这部分前缀和.jsp这部分后缀就会产生一定的冗余。所以我们要将这部分前缀和后缀配置到springmvc.xml中,让SpringMVC自己在内部进行拼接。这样能减少一定的冗余。接下来我们来修改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"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">
    
    <!-- 注册视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>
        
    <!-- 注册SpringMVC处理器 -->
    <bean id="/my.do" class="cn.wechatbao.controller.MyController"></bean>
</beans>

修改MyController中的handleRequest中的mv.setViewName("/WEB-INF/jsp/welcome.jsp");为mv.setViewName("welcome");重新发布程序并运行能得到相同的结果。

posted @ 2018-01-20 10:23  ITeachYou我教你  阅读(291)  评论(0编辑  收藏  举报