码迷,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,如 Controller、HandlerMapping、HandlerAdapter 等等,该初始化上下文应该只加载 Web 相关组件。

 

 

DispatcherServlet 初始化顺序

 技术分享

技术分享

技术分享

技术分享

技术分享

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

 

技术分享

技术分享

 

 技术分享

技术分享

技术分享

技术分享

技术分享

 

 

DispatcherServlet 默认配置

 

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

 

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

 技术分享

技术分享

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

因此如第二章的 BeanNameUrlHandlerMapping、SimpleControllerHandlerAdapter 是不需要注册的,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
迷上了代码!