概述
Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,来源于 Spring 模块 spring-webmvc,也就是我们平时所说的 “Spring MVC”。
官方文档:Web on Servlet Stack
Spring MVC 是围绕 Servlet 设计的,其核心类是 DispatcherServlet,它是一个 Servlet,顶层是实现的 Servlet 接口。
工作原理
DispatcherServlet 通过 Spring 配置文件来发现它需要的请求映射、视图解析、异常处理等委托组件,并由委托组件来执行。
Spring MVC 的处理流程如下:
流程说明:
- 客户端发送请求,直接请求到
DispatcherServlet; DispatcherServlet根据请求信息调用HandlerMapping,查找请求对应的Handler;- 找到对应的
Handler后,DispatcherServlet调用HandlerAdapter处理适配器; HandlerAdapter根据Handler信息调用具体的处理器处理业务逻辑;- 业务逻辑处理完成后,会返回
ModelAndView对象并返回给DispatcherServlet; DispatcherServlet调用ViewResolver,并传ModelAndView给它,ViewResolver解析对应的View并返回;DispatcherServlet返回View进行视图渲染请返回给客户端。
在 Handler 处理含输入参数的过程中,Spring 还根据配置做了一些预处理:
数据转换:将请求消息(JSON/XML等格式参数)转换为 Java 对象。
数据类型转换:对请求中的数据进行类型转换,如将字符型转为整形、双精度等。
数据格式化:对请求中的数据进行格式化,如将字符串转换为格式化数字或格式化日期。
数据验证:对数据有效性(空值、长度、格式等)验证,并将验证结果存储在
BindingResult中。
如今,前端技术发展特别快,衍生出了前后端分离的开发模式,在这种模式下,使用 Spring MVC 开发的系统就不再需要处理 View 的相关内容了,Controller 只需要返回 Model 数据,不再返回 ModelAndView 。那这种模式下的流程如下图:
参考文献
[1]. https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc
[2]. Illustrated spring: http request processing flow and mechanism [4]


