该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读

Spring 版本:5.2.4.RELEASE

该系列其他文档请查看:《精尽 Spring MVC 源码分析 - 文章导读》

在上一篇《WebApplicationContext 容器的初始化》文档中分析了 Spring MVC 是如何创建两个容器的,其中创建Root WebApplicationContext 后,调用其refresh()方法会触发刷新事件,完成 Spring IOC 初始化相关工作,会初始化各种 Spring Bean 到当前容器中,该系列文档暂不分析

我们先来了解一个请求是如何被 Spring MVC 处理的,由于整个流程涉及到的代码非常多,所以本文的重点在于解析整体的流程,主要讲解 DispatcherServlet 这个核心类,弄懂了这个流程后,才能更好的理解具体的源码,回过头再来看则会更加的豁然开朗

整体流程图

Spring MVC 处理请求的流程大致如上图所示

  1. 用户的浏览器发送一个请求,这个请求经过互联网到达了我们的服务器。Servlet 容器首先接待了这个请求,并将该请求委托给 DispatcherServlet 进行处理。
  2. DispatcherServlet 将该请求传给了处理器映射组件 HandlerMapping,并获取到适合该请求的 HandlerExecutionChain 拦截器和处理器对象。
  3. 在获取到处理器后,DispatcherServlet 还不能直接调用处理器的逻辑,需要进行对处理器进行适配。处理器适配成功后,DispatcherServlet 通过处理器适配器 HandlerAdapter 调用处理器的逻辑,并获取返回值 ModelAndView 对象。
  4. 之后,DispatcherServlet 需要根据 ModelAndView 解析视图。解析视图的工作由 ViewResolver 完成,若能解析成功,ViewResolver 会返回相应的 View 视图对象。
  5. 在获取到具体的 View 对象后,最后一步要做的事情就是由 View 渲染视图,并将渲染结果返回给用户。

以上就是 Spring MVC 处理请求的全过程,上面的流程进行了一定的简化,主要涉及到最核心的组件,还有许多其他组件没有表现出来,不过这并不影响大家对主过程的理解。

组件预览

在上一篇《WebApplicationContext 容器的初始化》文档讲述 FramworkServlet 的 onRefresh 方法时,该方法由 DispatcherServlet 去实现,会初始化九大组件,如何初始化的这里暂时不展开讨论,默认会从 spring-webmvc 下面的 DispatcherServlet.properties 文件中读取组件的实现类,感兴趣可以先阅读一下源码

最新文章

  1. jpa+springdata
  2. Yii2的深入学习--事件Event
  3. c# word 转pdf 导出失败,因为此功能尚未安装
  4. ubuntu 上更新安装 openoffice.org3的过程
  5. 安装、设置与启动MySql5.1.30绿色版的方法
  6. shell 编程中使用到得if语句内判断参数
  7. hive UDAF
  8. C# 调用 MFC DLL
  9. Linux下rar unrar的安装
  10. ASP.NET MVC 5 学习教程:添加查询
  11. mybatis学习一
  12. nexus 10 救砖 安装lineage OS 15 并 root
  13. jexus部署webapi或mvc报错处理
  14. patA1059 Prime Factors
  15. django之创建第4个项目编写第一个动态模板文件
  16. Non-parseable POM 解决方法
  17. RAD 10 C++Builder的bug
  18. “榕树下·那年”移动app ( hybrid ) 开发总结
  19. 数据库操作语句类型(DQL、DML、DDL、DCL)简介
  20. Python开发【数据结构】:排序练习

热门文章

  1. LeetCode 中等题解(4)
  2. HDU100题简要题解(2010~2019)
  3. 通过shodan搜索相同favicon.ico的网站
  4. kail下安装RsaCtfTool
  5. Android应用测试指南
  6. iOS问题:pch not found
  7. php bypass disable_function 命令执行 方法汇总简述
  8. Python学习系列之列表(十一)
  9. web文件上传漏洞
  10. QBXT 提高组储备营 2020.夏 游记