废话不多说上图
解释
-
DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接受请求并拦截请求。
补充:
- 假设请求的url:http://localhost:8080/SpringMVC/hello
- http://localhost:8080服务器域名
- SpringMVC部署在服务器上的web站点
- hello表示控制器
- 即表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello controller。
-
HandlerMapping为处理器映射,DispatcherServlet调用HandlerMapping,HandlerMapping根据请求查找Handler。
-
HandlerExecution表示具体的Handler,起主要作用是根据url查找控制器,如上url被查找控制器为:hello
-
HandlerExecution将解析后的信息以HandlerExecutionChain传递给DispatcherServlet。
-
HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
-
Handler让具体的Controller执行。
-
Controller将具体的执行信息如ModelAndView返回给HandlerAdapter。
-
HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
-
DispatcherServlet会调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
补充:
- 视图解析器:DispatcherServlet给他的ModelAndView
- 1.获取了ModelAndView的数据
- 2.解析ModelAndView的名字
- 3.拼接视图的名字,找到对应的视图 /WEB-INF/jsp/hello.jsp
- 4.将数据渲染到视图上
- 视图解析器将解析的逻辑视图名传递给DispatcherServlet
- DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
- 最终视图呈现给用户
总结
通俗地来说,SpringMVC的工作流程可以分为三个部分。
第一部分:判断一个请求是做什么的
第二部分:执行这个请求
第三部分:渲染视图返回给用户
参考视频
https://www.bilibili.com/video/BV1aE41167Tu?p=6