DispatchServlet请求处理源码分析
来源:互联网 发布:手机网络斗牛作弊器 编辑:程序博客网 时间:2024/06/05 18:51
1、Spring MVC框架核心控制器DispatchServlet拦截到请求后,调用doService进行请求处理:
a) 设置spring mvc框架中的相关对象到Request作用域中:
b) 调用doDispath()方法进行请求处理:
2、DispatchServlet对象doDispatch()进行请求处理:
a) 检查请求信息,如是否是文件上传请求等;
b) 调动getHandle()方法,遍历Spring Dispatch上下中注册的HandlerMapping对象,使用HandlerMapping处理器映射器根据url找到处理请求的Controller和处理方法。找到后就停止遍历,最终会返回一个HandlerExecutionChain对象。其中包括处理请求的Controller,处理方法,还有添加在该url上的拦截器(包括spring mvc默认添加的拦截器)。
注意:
默认添加的拦截器有:
ConversionServiceExposingInterceptor:每次请求处理前添加Conversion Service对象到Request作用域里面。
ResourceUrlProviderExposingInterceptor:每次请求处理前添加Resource UrlProvider对象到Request作用域里面。
启用spring mvc功能,如<mvc:annotaion-drivern/>或者@EnableWebMvc是spring会自动注册一些HandlerMapping对象,也可以手动配置。不同的handlerMapping实现,根据url映射到Controller的处理方法上的映射规则不一样,如:
BeanNameUrlHandlerMapping:根据url和Bean的name进行映射找到处理器对象Controller,Bean的name属性定义是已“/"开头,
RequestMappingHandlerMapping:spring3.1后使用,也是根据注解@Controller和@RequestMapping和url进行映射匹配对象的处理器Controller和处理方法。
c) 调用getHandlerAdapter()方法;遍历Spring Dispatch容器中的HandlerAdapter对象,查看每个HandlerAdapter对象能否支持上面找到controller(实际上并非Controller类型,是HandlerMapping对象返回的,不同的HandlerMapping返回的类型不一样)。
Spring MVC定了不同的HandlerAdapter对象,能够适配不同Controller实现对象,如:
SimpleControllerHandlerAdapter:要求Controller控制器实现Controller接口,以及实现接口中的方法handleRequest()方法来处理请求,通常和处理映射器BeanNameUrlHandlerMapping或者SimpleUrlHandlerMapping联合使用。
RequestMappingHandlerAdapter:适配使用注解@Controller和@RequestMapping标识的处理器,spring3.1后使用,替换了DefaultAnnotationHandlerAdapter,和RequestMappingHandler Mapping联合使用。
d) 请求预先处理,调用HandlerExecutionChain对象的applyPreHandle()预处理请求;遍历拦截该url的拦截器列表,执行preHandle()方法:
注意:拦截器列表中包括Spring MVC内置的拦截器。如:
ConversionServiceExposingInterceptor的preHandler()方法:
request.setAttribute(ConversionService.class.getName(), this.conversionService);
ResourceUrlProviderExposingInterceptor的preHandler()方法:
request.setAttribute(RESOURCE_URL_PROVIDER_ATTR, this.resourceUrlProvider);
e) 统一调用HandlerAdapter的handle()方法处理请求,并返回处理结果ModelAndView对象。
f) 解析返回的结果对象ModelAndView对象中的逻辑视图,没有则不解析
g) 请求后处理,调用HandlerExecutionChain对象的applyPOSTHandle()请求后处理;遍历拦截该url的拦截器列表,执行postHandle()方法:
h) 调用processDispatchResult()方法;处理请求处理结果,并返回相应数据。
- DispatchServlet请求处理源码分析
- SpringMVC源码之DispatchServlet请求处理
- spring mvc框架源码分析(一)-封装请求拦截器DispatchServlet
- Struts2源码分析--请求处理
- Struts2源码分析--请求处理
- Struts2源码分析--请求处理
- Struts2源码分析--请求处理
- Struts2源码分析--请求处理
- Struts2源码分析--请求处理
- Struts2源码分析--请求处理
- Struts2源码分析--请求处理
- Struts2源码分析--请求处理
- Struts2源码分析--请求处理
- struts2的请求处理过程源码分析
- struts2的请求处理过程源码分析
- Struts2源码分析--请求处理(一)
- Tomcat处理HTTP请求源码分析
- Struts2请求处理流程及源码分析
- Qweb
- 如何提高在vultr的ss的速度?
- Android基本布局案例
- ftp远程操作文件:读取,写入,移除,删除文件夹
- 子树
- DispatchServlet请求处理源码分析
- poj 1001 BigDecimal使用
- <head>中指定解析document使用的浏览器版本
- 中国移动wlan优化app-截图
- apt-get 命令提示
- Java的内存回收——Java的内存泄漏
- 安卓ShowAsAction属性
- Java生成随机流水号
- 二叉树的前序遍历