Spring MVC 执行流程

2/16/2022 JavaSpring

摘要

JDK:1.8.0_202
Spring Version:5.2.11.RELEASE

# 一:前言

下面的流程图,展示Spring MVC的mvc三部分处理情况,以及另外三大组件(HandlerMapping 处理器映射器、HandlerAdapter 处理器适配器以及 ViewReslover 视图解析器)的详细流程

Spring MVC执行流程图

SpringMVC,无论 HandlerMapping对象、HandlerAdapter对象还是 View对象,这些核心的接口所定义的方法中,HttpServletRequest 和 HttpServletResponse对象都是直接作为方法的参数出现的。这也就意味着,框架的设计者,直接将SpringMVC框架和容器绑定到了一起。或者说,整个SpringMVC框架,都是依托着Servlet容器元素来设计的。

# 二:组件详解

  1. DispatcherServlet:前端控制器。用户请求到达前端控制器,它就相当于mvc模式中的C,dispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet 的存在降低了组件之间的耦合性,系统扩展性提高。由框架实现

  2. HandlerMapping:处理器映射器。HandlerMapping 负责根据用户请求的url找到Handler 即处理器,Spring MVC 提供了不同的映射器实现不同的映射方式,根据一定的规则去查找,例如:XML配置方式,实现接口方式,注解方式等。由框架实现

  3. Handler:处理器。Handler 是继 DispatcherServlet 前端控制器的后端控制器,在DispatcherServlet 的控制下 Handler 对具体的用户请求进行处理。由于 Handler 涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler

  4. HandlAdapter:处理器适配器。通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。由框架实现

  5. ModelAndView:是Spring MVC的封装对象,将 Model 和 View 封装在一起

  6. ViewResolver:视图解析器。ViewResolver 负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户

  7. View:是 Spring MVC 的封装对象,是一个接口,Spring MVC 框架提供了很多的View视图类型,包括:jspview,pdfview,jstlView、freemarkerView等。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面

# 三:过程详解

  1. 整个过程始于客户端发出一个HTTP请求,Web应用服务器接收到这个请求。如果匹配 DispatcherServlet 的请求映射路径(在web.xml中指定),则Web容器将该请求转交给 DispatcherServlet 处理

  2. DispatcherServlet接收到这个请求后,将根据请求的信息(包括 URL、HTTP方法、请求报文头、请求参数、Cookie等)调用处理器映射器 HandlerMapping

  3. 处理器映射器根据请求url找到具体的处理器,生成处理器执行链 HandlerExecutionChain(包括处理器对象和处理器拦截器)一 并返回给 DispatcherServlet。可将 HandlerMapping 看作路由控制器,将Handler看作目标主机

  4. 当 DispatcherServlet 根据 HandlerMapping 得到对应当前请求的 Handler 后,通过HandlerAdapter 对 Handler 进行封装,再以统一的适配器接口调用 Handler。HandlerAdapter 是Spring MVC 的框架级接口,顾名思义,HandlerAdapter 是一个适配器,它用统一的接口对各种Handler 方法进行调用

  5. 处理器完成业务逻辑的处理后将返回一个 ModelAndView 给 DispatcherServlet,ModelAndView 包含了视图逻辑名和模型数据信息

  6. ModelAndView 中包含的是 "逻辑视图名" 而非真正的视图对象,DispatcherServlet 借由ViewResolver 完成逻辑视图名到真实视图对象的解析工作

  7. 当得到真实的视图对象 View 后,DispatcherServlet 就使用这个 View 对象对 ModelAndView 中的模型数据进行视图渲染

  8. 最终客户端得到的响应消息可能是一个普通的 HTML 页面,也可能是一个 XML 或 JSON 串,甚至是一张图片或一个PDF文档等不同的媒体形式

# 四:DispatcherServlet

具体源码链路解析查看

# 五:参考文献

最后更新: 2/27/2022, 8:30:40 PM