Spring MVC中的DispatcherServlet作用
一. DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得Spring的所有好处。
DispatcherServlet主要用作职责调度工作,本身主要用于控制流程,主要职责如下:
1、文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
2、通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);
3、通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);
4、通过ViewResolver解析逻辑视图名到具体视图实现;
5、本地化解析;
6、渲染具体的视图等;
<servlet>
<servlet-name> hra</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name> hra</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet>
该DispatcherServlet默认使用WebApplicationContext作为上下文,Spring默认配置文件为“/WEB-INF/[servlet名字]-servlet.xml”
二. DispatcherServlet使用的特殊的bean:
DispatcherServlet默认使用WebApplicationContext作为上下文,因此我们来看一下该上下文中有哪些特殊的Bean:
1、Controller:处理器/页面控制器,做的是MVC中的C的事情,但控制逻辑转移到前端控制器了,用于对请求进行处理;
2、HandlerMapping:请求到处理器的映射,如果映射成功返回一个HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象;如BeanNameUrlHandlerMapping将URL与Bean名字映射,映射成功的Bean就是此处的处理器;
3、HandlerAdapter:HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;如SimpleControllerHandlerAdapter将对实现了Controller接口的Bean进行适配,并且掉处理器的handleRequest方法进行功能处理;
4、ViewResolver:ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;如InternalResourceViewResolver将逻辑视图名映射为jsp视图;
5、LocalResover:本地化解析,因为Spring支持国际化,因此LocalResover解析客户端的Locale信息从而方便进行国际化;
6、ThemeResovler:主题解析,通过它来实现一个页面多套风格,即常见的类似于软件皮肤效果;
7、MultipartResolver:文件上传解析,用于支持文件上传;
8、HandlerExceptionResolver:处理器异常解析,可以将异常映射到相应的统一错误界面,从而显示用户友好的界面(而不是给用户看到具体的错误信息);
9、RequestToViewNameTranslator:当处理器没有返回逻辑视图名等相关信息时,自动将请求URL映射为逻辑视图名;
:::将Servlet初始化参数(init-param)设置到该组件上(如contextAttribute、contextClass、namespace、contextConfigLocation),通过BeanWrapper简化设值过程,方便后续使用;
初始化web上下文;
public class DispatcherServlet extends FrameworkServlet {
//实现子类的onRefresh()方法,该方法委托为initStrategies()方法。
@Override
protected void onRefresh(ApplicationContext context) {
initStrategies(context);
} //初始化默认的Spring Web MVC框架使用的策略(如HandlerMapping)
protected void initStrategies(ApplicationContext context) {
initMultipartResolver(context);//文件上传
initLocaleResolver(context);//本地化解析
initThemeResolver(context);//主题解析
initHandlerMappings(context);//将请求映射处理器
initHandlerAdapters(context);//适配器,对应处理器
initHandlerExceptionResolvers(context);//异常
initRequestToViewNameTranslator(context);
initViewResolvers(context);//视图解析
initFlashMapManager(context);
}
}
在web容器启动时,DispatcherServlet会初始化,然后它会做上面这些事情:
DispatcherServlet是前台控制器,配置在web.xml中,拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依据某某规则分发到目标Controller,这个过程需要HandlerMapping和HandlerAdapter.
最新文章
- MD5 、 加密工具
- Windows台的FailOver群集简介
- 自动编号维护SNRO
- Oracle获取AWR和ASH
- MVC为模型增加正则表达式
- 【转】C# Excel 导入到 Access数据库表(winForm版)
- 获取Delphi所有类的类信息
- finally 对 return 值没有影响
- executssql 函数的每一句代码的意思
- devexpress实现单元格根据条件显示不同的样式(颜色、字体、对齐方式,大小等)
- Python之正则表达式(re模块)
- Mybatis中如何将POJO作为参数传入sql
- jquery楼层效果
- DevExpress控件库 开发使用经验总结1 DevExpress简介、安装、使用
- Nginx代理的几种模式
- Java基础知识之锁
- 如何开启Intel HAXM功能
- BZOJ3309 DZY Loves Math(莫比乌斯反演+线性筛)
- python设置redis过期时间
- fd与FILE结构体
热门文章
- Computer Network Homework3’ s hard question
- [Flask]常用过滤器-控制字符串
- apache虚拟目录配置实例
- java:容器/集合(Map(HashMap,TreeMap)Collection和Collections,(Collection-value();)
- CentOS7 下SaltStack部署
- cocos2dx[3.2](5) 屏幕适配
- gitlab ssh 免密登录
- 奉献pytorch 搭建 CNN 卷积神经网络训练图像识别的模型,配合numpy 和matplotlib 一起使用调用 cuda GPU进行加速训练
- 在kali2.0中使用msf图形界面可能会遇到的问题
- Luogu P3647 [APIO2014]连珠线