《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了,这怎么办?我们需要一种有效的数据校验机制,来对数据进行有 ...
随机推荐
- C# Lock、Monitor避免死锁
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Android打赏功能:支付宝转账
适用于个人开发者开发的APP中,让用户打赏给作者,实质上进行支付宝转账到指定账号的功能. 一.打开'支付宝'APP ,点击'收款'功能 ,将收款码(二维码)图片保存到手机上(进一步移到电脑上). 二. ...
- acffo的开源项目汇总
1. XWaveView, 流动波浪效果 2.LogRecordHelper, logcat日志记录存储到文件 可以指定TAG , 将logcat日志写入文件 ...
- iOS实现类似QQ的好友列表,自由展开折叠(在原来TableView的基础上添加一个字典,一个Button)
//直接代码 只包含 折叠展开字典的处理搭建#import "CFViewController.h" @interface CFViewController ()<UITab ...
- Oracle11g不能导出空表问题
ORACLE 11g 用exp命令导出库文件备份时,发现只能导出来一部分表而且不提示错误,之前找不到解决方案只能把没导出来的表重新建建立.后来发现是所有的空表都没有导出来.于是想好好查查,因为在以前的 ...
- 推荐:让你快速搞定各服务端(api,pc,mobile,wechat)代码
如果你在写服务端 (PHP) ,会因为项目须求(做app.pc.mobiel.微信) 而写几套代码的,你不觉得很累吗? 现在的很多开源框架商用版本在做程序方面都是这么一套一套的,维护起来,二开起来特别 ...
- KVM 初探
KVM 是业界最为流行的 Hypervisor,全称是 Kernel-based Virtual Machine.它是作为 Linux kernel 中的一个内核模块而存在,模块名为 kvm.ko,也 ...
- MySql Schema 优化
MySQL Schema 优化: 1.保证你的数据库的整洁性. 2.归档老数据 — 删除查询中检索或返回的多余的行 3.在数据上加上索引. 4.不要过度使用索引,评估你的查询. 5 ...
- gitlab 接入 openldap、AD
=============================================== 20171009_第2次修改 ccb_warlock === ...
- 初学ssm框架的信息
ssm框架,就是Spring ,SpringMVC ,mybstis 的简称,我们是从mybstis 开始学起的,mybatis的作用作为一个连接数据库的框架,可以很好配置连接好数据库, 有mybat ...