当前位置 博文首页 > L-Java:Spring MVC 请求执行流程的源码深度解析【两万字】

    L-Java:Spring MVC 请求执行流程的源码深度解析【两万字】

    作者:[db:作者] 时间:2021-07-08 18:57

    ??基于最新Spring 5.x,详细介绍了Spring MVC 请求的执行流程源码,给出了更加详细的Spring MVC请求执行流程步骤总结,以及详细的执行流程图。

    ??我正在参与CSDN《新程序员》有奖征文,活动地址:https://marketing.csdn.net/p/52c37904f6e1b69dc392234fff425442。

    ??此前,我们学习了Spring MVC项目启动初始化过程中的部分重要源码,Spring MVC项目启动之后,便能够接受请求、处理请求。
    ??此前,我们已经学习了Spring MVC的请求执行流程,但实际上在Spring MVC请求执行流程过程中,要做的事儿有很多,比图CORS配置、参数转换等等,现在让我们从源码的角度再一次深入了解Spring MVC 请求的执行流程。
    ??在文章的最后我们也给出了更加详细的Spring MVC请求执行流程步骤总结,以及详细的执行流程图,嫌弃源码太长的小伙伴可以直接跳到末尾。
    ??下面的源码版本基于5.2.8.RELEASE

    Spring MVC源码 系列文章

    Spring MVC 初始化源码(1)—ContextLoaderListener与父上下文容器的初始化

    Spring MVC 初始化源码(2)—DispatcherServlet与子容器的初始化以及MVC组件的初始化【一万字】

    Spring MVC 初始化源码(3)—<mvc:annotation-driven >配置标签的源码解析

    Spring MVC 初始化源码(4)—@RequestMapping注解的源码解析

    Spring MVC 请求执行流程的源码深度解析【两万字】

    文章目录

    • Spring MVC源码 系列文章
    • 1 源码入口
    • 2 FrameworkServlet#service入口
    • 3 processRequest处理请求
      • 3.1 doService处理请求
      • 3.2 publishRequestHandledEvent发布请求处理完毕事件
    • 4 doDispatch分发请求
      • 4.1 checkMultipart检查文件上传请求
      • 4.2 getHandler获取HandlerExecutionChain
        • 4.2.1 mapping#getHandler获取HandlerExecutionChain
          • 4.2.1.1 getHandlerInternal获取内部处理器
            • 4.2.1.1.1 lookupHandlerMethod查找匹配的HandlerMethod
          • 4.2.1.2 CORS配置
            • 4.2.1.2.1 hasCorsConfigurationSource是否具有CORS配置
            • 4.2.1.2.2 getCorsHandlerExecutionChain配置CORS
      • 4.3 noHandlerFound没找到handler的处理
      • 4.4 getHandlerAdapter获取HandlerAdapter
        • 4.4.1 adapter#supports是否支持handler
      • 4.5 applyPreHandle执行拦截器的预处理
      • 4.6 handle实际处理请求
        • 4.6.1 invokeHandlerMethod执行HandlerMethod
          • 4.6.1.1 invokeAndHandle执行请求并处理
            • 4.6.1.1.1 invokeForRequest执行请求
            • 4.6.1.1.2 handleReturnValue处理返回值
          • 4.6.1.2 getModelAndView获取ModelAndView
      • 4.7 processDispatchResult处理异常或渲染视图
        • 4.7.1 render渲染视图
          • 4.7.1.1 resolveViewName解析视图名
          • 4.7.1.2 view#render渲染视图
            • 4.7.1.2.1 renderMergedOutputModel执行渲染
    • 5 总结
    cs