没有合适的资源?快使用搜索试试~ 我知道了~
Spring源码学习十:DispatcherServlet请求分发源码分析1
需积分: 0 0 下载量 125 浏览量
2022-08-04
16:02:23
上传
评论
收藏 418KB PDF 举报
温馨提示
试读
1页
总结:首先,SpringMVC框架在启动的时候会遍历Spring容器中的所有bean,对标注了@Controller或并,使用@RequestMapping注解
资源详情
资源评论
资源推荐
DispatcherServlet是SpringMVC的核分发,它实现请求分发,是处请求的,本篇将
深源码分析它的请求分发过程。
进主题前,回顾下DispatcherServlet的继承关系图。
Servlet在service法中进请求接收与分发,DispatcherServlet的service法继承
HttpServlet,具体代码如下图所示。
在FrameworkServlet中对这个protected修饰的service法进重写,重写的的是持
PATCH式请求,具体代码如下图所示。
上述分析中的doGet、doPost等法在HttpServlet中没有实际可的实现,如果要使这些
法,类需要重写这些法,DispatcherServlet没有重写这些法,在DispatcherServlet的类
FrameworkServlet中进重写,看个重写后的法代码。
可以看到这些请求都会进当前FrameworkServlet类的processRequest法进处,具体代码
如下图所示。
FrameworkServlet中的doService是个抽象法,DispatcherServlet重写这个法,具体代
码如下图。
进doDispatch法,这个法实现将请求分发到具体Handler、执拦截的preHandle
法、调Handler(编写的Controller)处具体逻辑、执拦截的postHandle法、处返回
的ModelAndView或异常、执拦截的afterCompletion法,具体代码如下。
上图描述中的HandlerMethod和HandlerExecutionChain代码如下所示。
总结:
先,SpringMVC框架在启动的时候会遍历Spring容中的所有bean,对标注@Controller或
@RequestMapping注解的类中法进遍历,将类和法上的@RequestMapping注解值进合
并,使@RequestMapping注解的相关参数值(如value、method等)封装个
RequestMappingInfo,将这个Controller实、法及法参数信息(类型、注解等)封装到
HandlerMethod中,然后以RequestMappingInfo为key,HandlerMethod为value存到个以Map
为结构的handlerMethods中。
接着,将@RequestMapping注解中的value(即请求径)值取出,即url,然后以url为key,以
RequestMappingInfo为value,存到个以Map为结构的urlMap属性中。
客户端发起请求的时候,根据请求的URL到urlMap中查找,找到RequestMappingInfo,然后根据
RequestMappingInfo到handlerMethods中查找,找到对应的HandlerMethod,接着将
HandlerMethod封装到HandlerExecutionChain;接着遍历容中所有HandlerAdapter实现类,
找到持这次请求的HandlerAdapter,如RequestMappingHandlerAdapter,然后执
SpringMVC拦截的前置法(preHandle法),然后对请求参数解析及转换,然后(使反射)调
具体Controller的对应法返回个ModelAndView对象,执拦截的后置法(postHandle
法),然后对返回的结果进处,最后执afterCompletion法。
史努比狗狗
- 粉丝: 25
- 资源: 318
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0