互联网架构-SpringMVC源码深度解析-029:DispatcherServlet源码分析

1 SpringMVC深度源码分析内容介绍

课程内容:
1.DispatcherServlet与Servlet的关系
2.DispatcherServlet底层源码分析
3.SpringMVC拦截器源代码分析
4.SpringMVC控制对象初始化的流程

2 DispatcherServlet类的继承关系

DispatcherServlet是SpringMVC中非常核心的类(一个Servlet类),包装了url到请求方法的映射关系,客户端所有的请求都会转发到DispatcherServlet,最终能够执行到SpringMVC中定义的请求方法。
在这里插入图片描述
源代码分析:

  1. 类的继承关系
    DispatcherServlet继承FrameworkServlet继承HttpServlet
  2. 流程:
    HttpServlet Service →判断请求如果Get请求→FrameworkServlet DoGet方法→DispatcherServlet doService方法→doDispatch()
    在这里插入图片描述

3 SpringMVC深度源码分析01

  1. 调用getHandler()通过url路径地址查询到具体的控制请求的方法,如果没有找到情况下直接返回404。Handler对应的就是控制层类方法。

底层有一个SpringMVC的容器,存放当前jvm中所有url映射的路径对应的请求的方法存放到Map集合。Key:url value:请求方法

SpringMVC映射路径的容器在什么时候被创建呢?
Servlet在调用我们的init的方法被创建的。

4 SpringMVC源码之定位Handler原理

Handler–请求控制层,HandlerMethod–请求具体方法;
HandlerMapping–当前所有的url路径的映射的集合、拦截器等,装配整个SpringMVC所有的信息。

为什么会存在有多个handlerMapping?
注解配置/Xml配置SpringMVC等,一个handler对应一个渠道来源。在这里插入图片描述

5 SpringMVC拦截器源码分析

进入拦截器前置方法
在这里插入图片描述
DispatcherServlet源码流程分析

  1. 执行doDispatch;
  2. 调用getHandler方法获取请求目标的方法,也就是请求url映射路径对应的控制层具体的方法;
    handlerMappings的作用查找控制器位置,比如xml和注解方式。
  3. 调用getHandlerAdapter获取控制层适配器 RequestMappingHandlerAdapter;
  4. 执行拦截器前置方法 preHandle(),如果返回为true的话继续执行;
  5. 执行实际请求目标方法,返回modeAndView对象;
  6. 执行拦截器PostHandle()方法
  7. 设置渲染视图层内容;
  8. 执行拦截器afterCompletion方法

6 SpringMVC路径映射初始化原理

SpringMVC控制层容器初始化

  1. HttpServletBean → init ()方法
  2. FrameworkServlet initServletBean方法 → initWebApplicationContext();
  3. DispatcherServlet onRefresh方法 → initStrategies()方法
protected void initStrategies(ApplicationContext context) {
		initMultipartResolver(context); //初始化上传文件解析器(或者是多部分请求解析器)
		initLocaleResolver(context);//初始化本地化解析器
		initThemeResolver(context);//初始化主题解析器
		initHandlerMappings(context);//初始化处理器映射器
		initHandlerAdapters(context);//初始化处理器适配器
		initHandlerExceptionResolvers(context);//初始化处理器异常解析器
		initRequestToViewNameTranslator(context);//初始化请求到视图名翻译器
		initViewResolvers(context);//初始化视图解析器
		initFlashMapManager(context);//初始化重定向数据管理器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值