概述

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,来源于 Spring 模块 spring-webmvc,也就是我们平时所说的 “Spring MVC”。

官方文档: Web on Servlet Stack

Spring MVC 是围绕 Servlet 设计的,其核心类是 DispatcherServlet,它是一个 Servlet,顶层是实现的 Servlet 接口。

DispatcherServlet类

工作原理

DispatcherServlet 通过 Spring 配置文件来发现它需要的请求映射、视图解析、异常处理等委托组件,并由委托组件来执行。

Spring MVC 的处理流程如下:

流程图

流程说明:

  1. 客户端发送请求,直接请求到 DispatcherServlet
  2. DispatcherServlet 根据请求信息调用 HandlerMapping,查找请求对应的 Handler
  3. 找到对应的 Handler 后,DispatcherServlet 调用 HandlerAdapter 处理适配器;
  4. HandlerAdapter 根据 Handler 信息调用具体的处理器处理业务逻辑;
  5. 业务逻辑处理完成后,会返回 ModelAndView 对象并返回给 DispatcherServlet
  6. DispatcherServlet 调用 ViewResolver ,并传 ModelAndView 给它,ViewResolver 解析对应的 View 并返回;
  7. DispatcherServlet 返回 View 进行视图渲染请返回给客户端。

Handler 处理含输入参数的过程中,Spring 还根据配置做了一些预处理:

如今,前端技术发展特别快,衍生出了前后端分离的开发模式,在这种模式下,使用 Spring MVC 开发的系统就不再需要处理 View 的相关内容了,Controller 只需要返回 Model 数据,不再返回 ModelAndView 。那这种模式下的流程如下图:

前后端分离的SpringMVC流程

参考文献

[1]. https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc

[2]. Illustrated spring: http request processing flow and mechanism [4]

文章目录