以下是SpringMVC的执行流程,也是SpringMVC的核心功能: 首先明确SpringMVC的核心三要素,基于三要素,进行流程分析。水平不佳,技术有限,如有错误,请大佬指正!
- 首先,用户发送请求,DispatchServlet接收请求并拦截请求。DispatchServlet表示前置控制器,是SpringMVC的核心。(具体作用:通过请求URI定位具体位置[所以,需要在里面注册于Spring-MVC的配置文件,以寻找对应的处理器])
一.处理器映射器
- HandlerMapping为处理器映射,其作用即:根据DispatcherServlet拦截到的url地址,通过关联的SpringMVC关联的配置文件,进行查找Handler。
- HandlerExecution表示具体的Handler,作用是根据uri查找控制器
看到这里,大家会有一个疑问,handler和控制器有什么区别呢?
(Handler 会接管所有请求,包括静态请求,如 localhost/css/style.css 或者 locahost/img/logo.jpg,并且可以改变请求所指向的资源参数如 String target参数,所以 Handler 具有可以处理更多的事情,例如改变 target 参数做url 伪静态或者 url 重写。而控制器处理的一般是web请求,并返回带有视图的处理程序,功能比较专一)(就比如你是个厨师(Handler),我是个专门做川菜的川厨(Controller))
此处若想了解更多,点击此链接进行深入研究
4.HandlerExecution将解析后的信息传递回DispatcherServlet.
二.处理器适配器
5.HandlerAdapter(处理器适配器)找到实现Controller的类或者含有@Controller的注解,进行一一适配.
6.执行具体的Controller(并调用其后的service层和dao层).
7.controller将执行完的信息返回给HandlerAdapter,即ModelAndView.(携带的基本信息有传递的数据,以及要传递的是哪个视图).
8.HandlerAdapter将视图逻辑名或者模型返回给DispatcherServlet。
三.视图解析器 ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4de26d8b5208c7dcace1aa4fedeb512e.png)
9.返回的数据经过视图解析器:获取了ModelAndView的数据,解析ModelAndView视图名,拼接视图名字,找到对应视图。
10.视图解析器将解析结果将解析的视图传回DispatchServlet.
11.DispatcherServlet根据解析的结果,调用对应视图.
12.发送给用户.