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

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

一、执行流程

441889-20180120102030256-942918730.jpg

来解释一下上图中的各个名词

1DispatcherServlet:SpringMVC的中央调度器,负责所有任务的调度。
2HandlerMapping:处理器映射器
3HandlerAdapter:处理器适配器
4Handler:处理器(咱们自己写的Controller)
5ViewResolver:视图解析器
6View:视图

流程:
当用户在浏览器中提交请求后首先进入我们的中央调度器,由中央调度器依次调用上图中的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的配置文件。如下图:

441889-20180120102102318-1226128017.png

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

三、配置视图解析器

来看我们的MyController,里面有

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

如果我们的系统中Controller有很多,每一个都这样来写,那/WEB-INF/jsp/这部分前缀和.jsp这部分后缀就会产生一定的冗余。所以我们要将这部分前缀和后缀配置到springmvc.xml中,让SpringMVC自己在内部进行拼接。这样能减少一定的冗余。接下来我们来修改springmvc.xml如下:

 1<?xml version="1.0" encoding="UTF-8"?>
2<beans xmlns="http://www.springframework.org/schema/beans"
3    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4    xmlns:context="http://www.springframework.org/schema/context"
5    xmlns:aop="http://www.springframework.org/schema/aop"
6    xmlns:tx="http://www.springframework.org/schema/tx"
7    xsi:schemaLocation="http://www.springframework.org/schema/beans
8        http://www.springframework.org/schema/beans/spring-beans.xsd
9        http://www.springframework.org/schema/context
10        http://www.springframework.org/schema/context/spring-context.xsd
11        http://www.springframework.org/schema/aop
12        http://www.springframework.org/schema/aop/spring-aop.xsd
13        http://www.springframework.org/schema/tx
14        http://www.springframework.org/schema/tx/spring-tx.xsd"
>

15
16    <!-- 注册视图解析器 -->
17    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
18        <property name="prefix" value="/WEB-INF/jsp/" />
19        <property name="suffix" value=".jsp" />
20    </bean>
21
22    <!-- 注册SpringMVC处理器 -->
23    <bean id="/my.do" class="cn.wechatbao.controller.MyController"></bean>
24</beans>

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


关于作者: 王俊南(Jonas)

昨夜寒蛩不住鸣。惊回千里梦,已三更。起来独自绕阶行。人悄悄,帘外月胧明。 白首为功名。旧山松竹老,阻归程。欲将心事付瑶琴。知音少,弦断有谁听。

热门文章