Spring MVC 是基于 Java 的 Web 框架,它是 Spring 框架的一部分,遵循 MVC (Model-View-Controller) 设计模式,用于构建 Web 应用程序。以下是其核心组件和特性的概述:
核心组件
-
DispatcherServlet
前端控制器,接收所有 HTTP 请求,负责请求的分发和响应的返回。 -
HandlerMapping(处理器映射器)
将请求 URL 映射到具体的 Controller 方法。 -
HandlerAdapter(处理器适配器)
适配并调用不同类型的处理器,处理方法参数绑定和返回值转换。 -
Controller
处理请求的业务逻辑,返回 ModelAndView 对象(包含视图名和模型数据)。 -
ViewResolver(视图解析器)
将逻辑视图名解析为具体的视图实现(如 JSP、Thymeleaf 等)。 -
View
负责渲染模型数据,生成 HTML 响应。
执行流程
jsp阶段:
- 用户发送出请求到前端控制器DispatcherServlet
- DispatcherServlet收到请求调用HandlerMapping(处理器映射器)
- HandlerMapping找到具体的处理器,生成处理器及拦截器链(如果有),再一起返回给DispatcherServlet.
- DispatcherServlet调用HandlerAdapter(处理器适配器)
- HandlerAdapter经过适配调用具体的处理器(Handler/Controller)
- Controller执行完成返回ModelAndView对象
- HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)
- ViewReslover解析后返回具体View(视图)
- DispatcherServet根据View进行渲染视图(即将模型数据填充至视图中)
前后端分离阶段:
- 用户发送出请求到前端控制器DispatcherServlet
- DispatcherServet收到请求调用HandlerMapping(处理器映射器)
- HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet.
- DispatcherServlet调用HandlerAdapter(处理器适配器)
- HandlerAdapter经过适配调用具体的处理器(Handler/Controller)
- 方法上添加了@ResponseBody
- 通过HttpMessageConverter来返回结果转换为JSON并响应
其他注意事项
- 拦截器的执行时机:
preHandle
在处理器调用前执行(JSP 和前后端场景均适用)。postHandle
在处理器调用后、视图渲染前执行(仅 JSP 场景涉及,前后端场景中因无视图渲染,可能在数据转换前执行)。afterCompletion
在整个请求完成后执行(无论哪种场景)。- 拦截器:虽然属于流程的一部分,但通常作为组件的增强功能而非核心组件列出。它通过
HandlerExecutionChain
加入流程,在请求处理前后执行额外逻辑。
@RestController
的本质:
相当于@Controller
+@ResponseBody
,可直接用于前后端分离场景,避免重复标注@ResponseBody
。