《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");重新发布程序并运行能得到相同的结果。
《SpringMVC从入门到放肆》二、SpringMVC的执行流程及默认配置的更多相关文章
- ROS入门笔记(二):ROS安装与环境配置及卸载(重点)
ROS入门笔记(二):ROS安装与环境配置及卸载(重点) [TOC] 1 ROS安装步骤 1.1 ROS版本 ROS目前只支持在Linux系统上安装部署, 它的首选开发平台是Ubuntu. 发布时间 ...
- 《SpringMVC从入门到放肆》三、DispatcherServlet的url-pattern配置详解
上一篇我们详细解释了一下SrpingMVC的执行流程以及一些默认的配置,在Spring的思想中,就是默认大于配置.今天我们来详细的研究一下DispatcherServlet的url-pattern配置 ...
- 《SpringMVC从入门到放肆》六、SpringMVC开发Controller的方法总结
到目前为止我们已经大概学习了StringMVC的执行流程,以及详细的处理器映射器和处理器适配器的执行流程,并可以自己写一个配置方式开发的小Demo了.今天我们来总结一下实现一个Controller的几 ...
- 《SpringMVC从入门到放肆》五、SpringMVC配置式开发(处理器适配器)
上一篇我们大致讲解了处理器映射器的处理流程以及跟了一下源码的执行流程.今天我们来了解一下处理器适配器. 一.适配器模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述适配器(Adapt ...
- SpringMVC学习笔记一:基本概念,执行流程与开发步骤
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6831328.html 一:基本概念 DispatcherServlet:前端控制器,负责把请求分发处理. H ...
- 《SpringMVC从入门到放肆》十二、SpringMVC自定义类型转换器
之前的教程,我们都已经学会了如何使用Spring MVC来进行开发,掌握了基本的开发方法,返回不同类型的结果也有了一定的了解,包括返回ModelAndView.返回List.Map等等,这里就包含了传 ...
- 《SpringMVC从入门到放肆》一、概述
一.SpringMVC概述 View Service Dao DB Spring MVC interface interface Mysql impls impls SpringMVC也叫Spring ...
- 《SpringMVC从入门到放肆》四、SpringMVC配置式开发(处理器映射器)
上一篇我们讲解了DispatcherServlet的url-pattern配置详解,今天我们来真正对SpringMVC进行配置式开发.所谓配置式开发是指“处理器类是程序员自己定义的.实现了特定接口的类 ...
- 《SpringMVC从入门到放肆》十三、SpringMVC数据校验
上一章,我们学习了SpringMVC的自定义类型转换器,但是如果转换后的数据传递到Controller的方法中,忽然发现有某些属性为Null了,这怎么办?我们需要一种有效的数据校验机制,来对数据进行有 ...
随机推荐
- 随聊——Python的前世今生
1989年圣诞节前夕,山雨欲来风满楼,计算机程序设计语言界隐隐有大事要发生,果然不出所料.江湖人称龟叔(Guido von Rossum),就是这位祖籍荷兰的大能,在圣诞节百无聊赖的期间,发明了Pyt ...
- C# 委托高级应用----线程——创建无阻塞的异步调用(二)
了解IAsyncResult 现在我们已经了解,EndInvoke可以给我们提供传出参数与更新后的ref参数:也可以向我们导出异步函数中的异常信息.例如,我们使用BeginInvoke调用了异步函数S ...
- AutoLayout的几种方法
1.XIB 2.Fram 3.屏幕比例适配(个人比较推荐) iOS屏幕适配(尺寸适配) 4.NSLayoutConstraint. 5.Masonry 概述 使用 Objective-C 纯代码编 ...
- sublime学习笔记
学习课程地址:快乐的sublime编辑器_sublime编辑器使用 另可参考笔记地址:http://c.haoduoshipin.com/happysublime/ PS:博主的一些文章地址:http ...
- NOI 2009 诗人小G
题目描述 Description 小G是一个出色的诗人,经常作诗自娱自乐.但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并放在一行 ...
- 如何严格设置php中session过期时间
如何严格限制session在30分钟后过期! 1.设置客户端cookie的lifetime为30分钟: 2.设置session的最大存活周期也为30分钟: 3.为每个session值加入时间戳,然后在 ...
- avro 1.8.2 (js)
5月15日发布的avro 1.8.2 已经包含了js版代码. 清华大学镜像地址: https://mirrors.tuna.tsinghua.edu.cn/apache/avro/avro-1.8.2 ...
- PHP与REDIS
安装 1.一定要搞懂自己php的版本,和环境,今天试一上午,就是因为X86,而我的php环境是X64. 2. 将下载的php_redis.dll和php_igbinary.dll放在php扩展目录中( ...
- shader 2 : use shaderToy in unity
shadertoy 原型,https://www.shadertoy.com/view/XslGRr 先说几个概念 Shader language目前有3种主流语言:基于OpenGL的GLSL(Ope ...
- 通过js中的useragrent来判断设备是pc端还是移动端,跳转不同的地址
if(/AppleWebKit.*Mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alc ...