了解SpringMVC的工作过程可以让我们更好理解各个SpringMVC组件的作用,而在常态化的使用中加深对SpringMVC中更多的理解
发起一个http请求时springMVC是如此工作的。
- 用户发起一个 HTTP 请求,该请求会被 DispatcherServlet(前端控制器)拦截;
- DispatcherServlet 调用 HandlerMapping(处理器映射器)找到具体的处理器(Handler)及拦截器,最后以 HandlerExecutionChain 执行链的形式返回给 DispatcherServlet。
- DispatcherServlet 将执行链返回的 Handler 信息发送给 HandlerAdapter(处理器适配器);
- HandlerAdapter 根据 Handler 信息找到并执行相应的 Handler(Controller 控制器)对请求进行处理;
- Handler 执行完毕后会返回给 HandlerAdapter 一个 ModelAndView 对象(Spring MVC 的底层对象,包括 Model 数据模型和 View 视图信息);
- HandlerAdapter 接收到 ModelAndView 对象后,将其返回给 DispatcherServlet ;
- DispatcherServlet 接收到 ModelAndView 对象后,会请求 ViewResolver(视图解析器)对视图进行解析;
- ViewResolver 解析完成后,会将 View 视图并返回给 DispatcherServlet;
- DispatcherServlet 接收到具体的 View 视图后,进行视图渲染,将 Model 中的模型数据填充到 View 视图中的 request 域,生成最终的 View(视图);
- 视图负责将结果显示到浏览器(客户端)。
Spring MVC 组件作用
常用组件共有 6 个,它们分别是: DispatcherServlet(前端控制器)、HandlerMapping(处理器映射器)、HandlerAdapter(处理器适配器)、Handler(处理器)、ViewResolver(视图解析器)和 View(视图)。
组件名 | 提供者 | 解释 |
---|---|---|
DispatcherServlet(前端控制器) | 框架 | 本质是一个 Servlet。负责对所有的请求进行统一分发,相当于一个 Spring MVC 的流程控制中心,控制整个流程的执行,对各个组件进行统一调度,以降低组件之间的耦合性,有利于组件之间的拓展。 |
HandlerMapping(处理器映射器) | 框架 | 根据请求的 url、method 等信息查找响应的 Handler 处理器(即 Controller 控制器方法) |
HandlerAdapter(处理器适配器) | 框架 | 负责根据 HandlerMapping 映射器找到的处理器(Handler)信息,按照特定规则执行相关的处理器(Handler)方法 |
Handler(处理器) | 开发者 | Controller 控制器,负责在 DispatcherServlet 的控制下,对具体的请求进行处理 |
ViewResolver(视图解析器) | 框架 | 通过 ModelAndView 对象中的 View 信息对逻辑视图名进行解析,将其解析成真正的视图 View(例如 ThymeleafView、InternalResourceView、RedirectView 等),并返回给 DispatcherServlet |
View(视图) | 框架+开发者 | 将 Model 模型数据通过页面展示给用户,View 对象 由框架提供,但视图所对应的前端页面(例如 JSP、HTML)由开发人员自行编写 |