Spring MVC 执行流程
Spring MVC 请求处理遵循固定的执行流程,理解流程有助于掌握框架原理。
完整执行流程
text
请求 → DispatcherServlet → HandlerMapping → HandlerExecutionChain
→ HandlerAdapter → Controller → ModelAndView → ViewResolver
→ View → 响应
详细步骤
1. 请求到达
text
HTTP Request → DispatcherServlet
DispatcherServlet 作为前端控制器接收所有请求。
2. 查找处理器
text
DispatcherServlet → HandlerMapping → HandlerExecutionChain
HandlerMapping 根据请求 URL 找到对应的 Controller 方法。
3. 执行拦截器前置处理
text
HandlerExecutionChain → Interceptor.preHandle()
执行注册的 HandlerInterceptor 的 preHandle 方法。
4. 执行处理器
text
HandlerAdapter → Controller 方法 → ModelAndView
HandlerAdapter 调用 Controller 方法,返回 ModelAndView。
5. 执行拦截器后置处理
text
Interceptor.postHandle()
6. 解析视图
text
ViewResolver → View
根据视图名解析为具体的 View 对象。
7. 渲染视图
text
View.render() → HTTP Response
8. 完成处理
text
Interceptor.afterCompletion()
核心组件职责
| 组件 | 职责 |
|---|---|
| DispatcherServlet | 前端控制器,统一调度 |
| HandlerMapping | 请求到处理器的映射 |
| HandlerAdapter | 处理器执行适配 |
| ViewResolver | 视图名到视图的解析 |
| View | 页面渲染 |
流程时序图
text
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ Client │ │Dispatcher│ │ Handler │ │Controller│ │ View │
│ │ │ Servlet │ │ Mapping │ │ │ │Resolver│
└───┬────┘ └────┬───┘ └────┬───┘ └────┬───┘ └────┬───┘
│ │ │ │ │
│ Request │ │ │ │
│───────────▶│ │ │ │
│ │ getHandler│ │ │
│ │──────────▶│ │ │
│ │◀──────────│ │ │
│ │ │ │ │
│ │ handle() │ │ │
│ │─────────────────────▶│ │
│ │◀─────────────────────│ │
│ │ ModelAndView │ │
│ │ │ │ │
│ │ resolveViewName │ │
│ │────────────────────────────────▶│
│ │◀────────────────────────────────│
│ │ │ │ View
│◀───────────│─────────────────────────────────│
│ Response │ │ │ │
异常可在任何阶段抛出,由 HandlerExceptionResolver 统一处理。
要点总结
- DispatcherServlet 是核心调度器
- HandlerMapping 决定请求由谁处理
- HandlerAdapter 决定如何调用处理器
- ViewResolver 决定如何渲染页面
- 拦截器在三个关键节点插入处理逻辑
📝 发现内容有误?点击此处直接编辑