在 《SpringMVC -1 - 归档 、 HelloWorld(快速搭建纯SpringMVC)》 也有说了运行流程,但是那个太简单了。
如下:
下面看一个完整的:
文章目录
完整的图:
# 源码
看 DispatcherServlet
类的 doDispatch
方法的几个关键类,熟悉整个流程
## 1、hanlder ?
处理器
处理器调用链,包含了***、handler和目标方法
进去 handler
handlerMapping
定义了请求到处理器的映射
- <mark>没有配置 下面注解的 + 没有路径映射的情况</mark>
handlerMappings 的情况如下
如果 请求路径没有对应的映射,handlerMapping循环后返回的 handler 为null
- <mark>加了下面注解 + 没有对应路径映射的全抗</mark>
handlerMappings 的情况如下
明显<mark>多了 SimpleUrlHandlerMapping</mark> , 这个是做静态资源请求的 - 看这篇文章
这时候,当其他映射没有成功,会到 SimpleUrlHandlerMapping映射,把请求 当成是 <mark>静态资源</mark> 请求
(我们知道,DefaultServletHttpRequestHandler 是处理静态资源的)
- <mark>加了注解 + 有对应映射的情况</mark>(也就是最常见的情况)
handler 为RequestMappingHandlerMapping
文章目录
## 2、handlerAdapter
适配器
可以看到,下面,<mark>handlerAdapter包含了很多Resolver(解析器)</mark>
文章目录
## 3、preHandle
***
文章目录
## 4、 ModelAndView
模型或视图
- 《SpringMVC - 6 -视图解析器(InternalResourceViewResolver)流程分析、JstlView(ftm 国际化)、自定义视图BeanNameViewResolver》 https://blog.csdn.net/LawssssCat/article/details/104272066
文章目录
## PostHandle
同样是*** , 看上面
## processDispatchResult
处理视图
processDispatchResult - 如果有异常
交给 HandlerExceptionResolver 处理
processDispatchResult - 正常
render 处理视图
processDispatchResult - render
没有异常
⇒ 首先找到 view 对象 ⇒ 使用视图解析器 找view 对象
processDispatchResult - render - view.render
没有异常
⇒ 首先找到 view 对象 ⇒ 使用视图解析器 找view 对象
⇒ ⇒ 渲染视图
下面。设置转发
下面,forward(完)