springmvc运行流程简单解释(源码解析,文末附自己画的流程图)
首先看一下DispatcherServlet结构:

观察HandlerExecutionChain对象的创建与赋值,这个方法用来表示执行这个方法的整条链。

进入getHandler方法:

此时的变量handlerMappings为:

刚好对应我们的三个方法,说明了我们的方法映射全部存放在handlerMappings中,通过遍历handlerMapping来进行操作。
通过HandlerMapping来对HandlerExecutionChain赋值。

执行完这一句参数有,说明获取了一条完整的链,可以来进行执行了,注意此时获取到的是所有拦截器,因为必须要走过所有拦截器。


通过HandlerExecutionChain对象来获取HandlerAdapter对象,通过这个对象进行控制器方法的调用,并返回ModelAndView对象,再通过ModelAndView对象调用解析器创建视图对象,再通过视图对象的渲染方法来进行最终的用户的需求结果处理。

完成这一步后使用ha调用拦截器的preHandle方法,如果放行,则执行handle方法,不放行,则返回:

进入此方法中:

下一步就是执行handler处理方法,执行完方法返回一个ModelAndView对象,使用此对象调用视图解析器创建视图对象,再根据视图对象调用其渲染方法将模型中的数据以特定的格式传输给用户。

继续执行:

执行到这里以及执行完核心业务了,需要执行postHandler方法,注意这个注释,无论是不是有异常,最终都是到这个方法中,并且有相应的异常的话还是会返回一个ModalAndView对象,让错误的结果还是能正常返回,并给出相对友好的提示信息。
/**
- Handle the result of handler selection and handler invocation, which is
- either a ModelAndView or an Exception to be resolved to a ModelAndView.
*/
处理完postHandler方法之后,再执行processDispatcherResult方法。

有异常的处理:

执行渲染方法:

进入方法,根据视图解析器获取视图,获得视图对象就返回:

解析完成,调用view的 render方法(注意不是DispatcherServlet的render方法):

view的render方法:


执行完渲染,跳转时执行拦截器的afterCompletion方法。

进入方法:

弄完这些,还要通过过滤器链等等,最终才完成一整个springmvc的执行流程。
按照我自己的理解,画出了这么一幅流程图,希望对大家有帮助:

springmvc运行流程简单解释(源码解析,文末附自己画的流程图)的更多相关文章
- 面试高频SpringMVC执行流程最优解(源码分析)
文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star! 搜索关注微信公众号 码出Offer 领取各种学习资料! SpringMVC执行流程 SpringMVC概述 Spri ...
- KBEngine简单RPG-Demo源码解析(1)
一:环境搭建1. 确保已经下载过KBEngine服务端引擎,如果没有下载请先下载 下载服务端源码(KBEngine): https://github.com ...
- servlet-servlet的简单认识——源码解析
Servlet的基本认识 本内容主要来源于<看透Spring MVC源码分析与实践——韩路彪>一书 Servlet是server+Applet的缩写,表示一个服务器的应用.Servlet其 ...
- SpringMVC一点简单地源码解析
. 1.1 init(初始化) 在第一次发出请求时,会调用HttpServletBean 的init()方法 org.springframework.web.servlet.HttpServletBe ...
- KBEngine简单RPG-Demo源码解析(2)
七:服务端资产库文件夹结构http://kbengine.org/cn/docs/concepts/directorys.html看assets, 注意:demo使用的不是默认的assets资产目录, ...
- KBEngine简单RPG-Demo源码解析(3)
十四:在世界中投放NPC/MonsterSpace的cell创建完毕之后, 引擎会调用base上的Space实体, 告知已经获得了cell(onGetCell),那么我们确认cell部分创建好了之后就 ...
- springMVC框架核心方法调用源码解析
- Flink 源码解析 —— 源码编译运行
更新一篇知识星球里面的源码分析文章,去年写的,周末自己录了个视频,大家看下效果好吗?如果好的话,后面补录发在知识星球里面的其他源码解析文章. 前言 之前自己本地 clone 了 Flink 的源码,编 ...
- Flink 源码解析 —— Standalone Session Cluster 启动流程深度分析之 Job Manager 启动
Job Manager 启动 https://t.zsxq.com/AurR3rN 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0到1学习 -- Mac ...
随机推荐
- Kong06-Kong 的集群怎么用
Kong 集群允许您通过添加更多的机器来处理更多的传入请求来横向扩展系统.它们将共享相同的配置,因为它们指向相同的数据库.指向相同数据存储的 Kong 节点将属于相同的 Kong 集群. 您需要在Ko ...
- 【实用工具】这些你不得不知道的chrome插件,让你事半功倍
平时chrome插件用多了,发现在工作中有很多插件特别好用,让你事半功倍.于是我抽时间整理了一些非常好用的chrome插件分享给大家,其中有些插件是我已经离不开,每天都在用的.希望这篇文章能帮助你找到 ...
- VM小技巧——虚拟机解决vm窗口太小的办法
——" 慢下来总结才能增大效率" 很多人在装虚拟机的时候,遇到了窗口过小不能自适应的问题.我也是查了好多资料,都说安装Vmware Tools即可解决,还有说修改分辨率也可以.两种 ...
- C++总结(1)keywords to the class
目录 Chapter 1.关于类的关键字 1. class,struct与union 2.private,public与protected 3.friend 4.virtual 5.const 6.i ...
- jquery正确获取iframe里元素的方法
<iframe id="_ae_frame" width="100%" height="100%" frameborder=" ...
- 深入理解计算机系统 第八章 异常控制流 part1
本章主旨 第八章的目的是阐述清楚应用程序是如何与操作系统交互的(之前章节的学习是阐述应用程序是如何与硬件交互的) 异常控制流 异常控制流,即 ECF(exceptional contril flow) ...
- 网站搭建-2-本地网站搭建-安装Linux虚拟机/ 安装IIS Windows
搭建网站-1-域名申请参见公众号 生物信息系统(swxxxt) 首先,已经拥有了一个可以正常使用的域名. 之前买了两年的阿里的服务器,由于是Windows的,最后不了了之了(因为当时找的代码都是lin ...
- [LC]206题 Reverse Linked List (反转链表)(链表)
①英文题目 Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5-> ...
- Asciinema文章勘误及Web端使用介绍
欠下的债迟早是要还的,查文档,重验证,出结果,不误导 文章勘误 在上一篇文章Asciinema:你的所有操作都将被录制中有两个地方表述有错误或瑕疵,这里更正一下 第一个地方为录制时的参数--stdin ...
- vue项目iframe的传值问题
前言 项目需要,我需要引入一个已经封装好的浏览器插件.插件只能以html的方式调用, 所以.我把插件的使用封装了一个html页面.vue项目则利用iframe的方式引入. 到这里我就遇到了一个问题,那 ...