码迷,mamicode.com
首页 > 其他好文 > 详细

前端控制器DispatcherServlet 详解

时间:2016-08-21 22:36:51      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:

 

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

 

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

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

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

HandlerInterceptor 拦截器);

3 通过 HandlerAdapter 支持多种类型的处理器(HandlerExecutionChain 中的处理器)4、通过 ViewResolver 解析逻辑视图名到具体视图实现;5、本地化解析;6、渲染具体的视图等;

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

 

从以上我们可以看出 DispatcherServlet 主要负责流程的控制(而且在流程中的每个关键点都是很容易扩展的)。

技术分享

技术分享

技术分享

 

 

 

上下文关系

 技术分享

创建完毕后会将该上下文放在 ServletContext

servletContext.setAttribute( WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);

 技术分享

从图中可以看出:

 

ContextLoaderListener 初始化的上下文加载的 Bean 是对于整个应用程序共享的,不管是使用什么表现层技术,一般如 DAO 层、Service  Bean

 

DispatcherServlet 初始化的上下文加载的 Bean 是只对 Spring Web MVC 有效的 Bean,如 ControllerHandlerMappingHandlerAdapter 等等,该初始化上下文应该只加载 Web 相关组件。

 

 

DispatcherServlet 初始化顺序

 技术分享

技术分享

技术分享

技术分享

技术分享

initWebApplicationContext()方法可以看出,基本上如果 ContextLoaderListener 加载了上下文将作为根上下文(DispatcherServlet 的父容器)。

 

技术分享

技术分享

 

 技术分享

技术分享

技术分享

技术分享

技术分享

 

 

DispatcherServlet 默认配置

 

DispatcherServlet 的默认配置在 DispatcherServlet.properties(和 DispatcherServlet 类在一个包下)中,而且是当 Spring

 

配置文件中没有指定配置时使用的默认策略:

 技术分享

技术分享

从如上配置可以看出 DispatcherServlet 在启动时会自动注册这些特殊的 Bean,无需我们注册,如果我们注册了,默认的将不会注册。

因此如第二章的 BeanNameUrlHandlerMappingSimpleControllerHandlerAdapter 是不需要注册的,DispatcherServlet 

认会注册这两个 Bean

DispatcherServlet.properties 可以看出有许多特殊的 Bean,那接下来我们就看看 Spring Web MVC 主要有哪些特殊的Bean

 

 

DispatcherServlet 中使用的特殊的 Bean

 技术分享

 

前端控制器DispatcherServlet 详解

标签:

原文地址:http://www.cnblogs.com/doudouxiaoye/p/5793657.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!