文档章节

二 理解DispatcherServlet

Tunie
 Tunie
发布于 2014/11/08 10:32
字数 1198
阅读 191
收藏 10

    要理解DispatcherServlet,首先看一下他的作用,先摘一段开涛的原话:

DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。

    何为前端控制器设计模式呢?下面是一段摘自百度找到的文字:

前端控制器(front controller)主要提供一种可以集中式管理请求的控制器,一个前端控制器可以接受所有的客户请求,将每个请求递交给相应的请求句柄,并适当地响应用户。

前端控制器也是表示层的设计模式,它的出现主要是由于表示层通常需要控制和协调来自不同用户的多个请求,而这种控制机制又根据不同的需要,可能会集中式控制或分散式控制。换句话说,就是应用系统需要对于表示层的请求提供一个集中式控制模块,以提供各种系统服务,包括内容提取、视图管理和浏览,如果系统中没有这种集中式控制模块或控制机制,每个不同的系统服务都需要进行单独的视图处理,这样代码的重复性就会提高,致使系统开发代价提高。同时,如果没有一个固定模块管理视图之间的浏览机制,致使其浏览功能下放于每个不同的视图中,最终必将使得系统的可维护性受到破坏。

    大家不要在意这些细节,大概知道这个设计模式的作用就是集中客户请求,并负责职责的分派就行。重点在于,它与Spring IOC容器无缝集成,没得说,同一家公司的东西,肯定是无缝的。

    现在来看下他的作用,摘自开涛的原文:

DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:

1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;

2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);

3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);

4、通过ViewResolver解析逻辑视图名到具体视图实现;

5、本地化解析;

6、渲染具体的视图等;

7、如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。

    欲知后事如何,请看http://jinnianshilongnian.iteye.com/blog/1602617 

分解。再加点料:

DispatcherServlet默认使用WebApplicationContext作为上下文,因此我们来看一下该上下文中有哪些特殊的Bean:

1、Controller处理器/页面控制器,做的是MVC中的C的事情,但控制逻辑转移到前端控制器了,用于对请求进行处理;

2、HandlerMapping请求到处理器的映射,如果映射成功返回一个HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象;如BeanNameUrlHandlerMapping将URL与Bean名字映射,映射成功的Bean就是此处的处理器;

3、HandlerAdapterHandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;如SimpleControllerHandlerAdapter将对实现了Controller接口的Bean进行适配,并且掉处理器的handleRequest方法进行功能处理;

4、ViewResolverViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;如InternalResourceViewResolver将逻辑视图名映射为jsp视图;

5、LocalResover本地化解析,因为Spring支持国际化,因此LocalResover解析客户端的Locale信息从而方便进行国际化;

6、ThemeResovler主题解析,通过它来实现一个页面多套风格,即常见的类似于软件皮肤效果;

7、MultipartResolver文件上传解析,用于支持文件上传;

8HandlerExceptionResolver处理器异常解析,可以将异常映射到相应的统一错误界面,从而显示用户友好的界面(而不是给用户看到具体的错误信息);

9RequestToViewNameTranslator当处理器没有返回逻辑视图名等相关信息时,自动将请求URL映射为逻辑视图名;

10FlashMapManager用于管理FlashMap的策略接口,FlashMap用于存储一个请求的输出,当进入另一个请求时作为该请求的输入,通常用于重定向场景,后边会细述。




© 著作权归作者所有

共有 人打赏支持
Tunie
粉丝 2
博文 30
码字总数 17318
作品 0
杭州
高级程序员
你真的理解SpringMVC DispatcherServlet中的映射了吗?

一、Request URL 与 Servlet url-pattern匹配顺序与关系 当一个请求发送到servlet容器(服务器)的时候,容器先会将请求的url减去当前应用上下文的路径,就是scheme://ip:port/context的 ur...

trayvon
2016/06/16
380
0
SpringMVC学习路 总贴 目录

因为会status2 所以学习理解起来还是比较快点,基础一般的童鞋最好还是看一些讲的很明白的博客 目录 Spring MVC学习路(一) 下载配置文件 Spring MVC学习路(二) 设置配置文件 Spring MVC...

minidai
2015/12/01
262
0
Spring MVC源码学习一之初始化

一、简单提下使用入门(依赖于注解方式) 1、通过在web.xml中添加配置,引入spring mvc框架,类似于Struts2引入需要在web.xml中配置过滤器StrutsPrepareAndExecuteFilter一样,但是Spring MVC是...

silence88
2016/12/20
32
1
Spring MVC 4.0之DispatcherServlet

Spring MVC Dispatcher介绍 Spring的 WebApplicationContext的层级关系 在这里关键是要理解DispatcherServlet所在的context和全局context的关系。全局Context是由ContextLoaderListener初始化...

chenhai_bj
2014/06/24
0
0
springMVC的适配器+解析器+控制器等分析

通过入门程序理解springmvc前端控制器、处理器映射器、处理器适配器、视图解析器用法。 前端控制器配置: 第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析 第二种:/,所以...

sprouting
2016/08/12
217
0

没有更多内容

加载失败,请刷新页面

加载更多

linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
7
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
2
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
18
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部