bilibili视频教程:https://www.bilibili.com/video/BV1mE411X7yp?p=165&spm_id_from=pageDriver
组件
springmvc是基于组件方式执行流程的、以下执行流程涉及到5大组件。
- 前端控制器DispatcherServlet
是最重要的组件,作用相当于人的大脑
,用于接收请求、响应结果,相当于转发器,中央处理器,指挥着springmvc中的其他组件配合完成某个用户发来的请求。并且DispatcherServlet降低了组件之间的耦合性,就如人的大脑指挥着脚走路,嘴吃东西,眼睛看东西一样,脚嘴眼完全是不同的器官他们各自独立,互不影响。 - 处理器映射器HandlerMapping
作用:根据请求的url查找Handler然后返回给DispatcherServlet控制器
这个是根据用户请求的url找到Handler即处理器也就是我们编写的controller。 - 处理器适配器HandlerAdapter
作用:用于执行HandlerMapping返回给DispatcherServlet控制器的处理器Handler的,执行完之后会返回一个ModelAndView给控制器。 - 处理器Handler
也就是我们自己写的controller - 视图解析器View resolver
作用:进行视图解析,根据逻辑视图名解析成真正的视图(view) - 视图View
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)
其中处理器Handler(Controller),视图View(JSP等)要我们自己编写。
前端控制器DispatcherServlet,在spring配置文件中配置InternalResourceViewResolver
处理器映射器HandlerMapping,处理器适配器HandlerAdapter在springmvc配置文件中开启注解<mvc:annotation-driven> </mvc:annotation-driven>
就会自动配置好
执行原理(面试必问)
根据下图
- 假如用户发送一个请求给我们用springmvc编写的系统、这时这个请求最先被前端控制器DispatcherServlet接收到。
- DispatcherServlet接收到请求后他自己不能处理这个请求他只能交给其他组件处理,他会首先找到请求的是哪个处理器也就是我们编写的Controller,这个时候就会调用处理器映射器HandlerMapping去查找是哪个处理器
- 找到之后返回给DispatcherServlet前端控制器
- 找到是哪个处理器之后就要执行这个处理器了,这时候就会将处理器交给处理器适配器HandlerAdapter执行
- Handler经过是配置器后执行
- Handler执行完之后会返回一个ModelAndView给处理适配器HandlerAdapte
- 适配器HandlerAdapte再返回给前端控制器DispatcherServlet
- 同样前端控制器DispatcherServlet无法处理ModelAndView这里就要交个视图解析去组件去处理了,
- 处理完之后会返回一个视图View给前端控制器DispatcherServlet。
- 前端控制器DispatcherServlet拿到View之后会交给组件视图View进行渲染,数据填充。
- 最终将渲染好的视图结果返回给用户。