在 Spring MVC 框架中,核心组件通过高度解耦的协作机制完成 Web 请求处理,形成一个灵活且可扩展的请求处理管道。以下是主要核心组件及其协作流程的详细解析:
核心组件概览
组件 | 职责 | 关键实现类 |
DispatcherServlet | 前端控制器,统一接收所有请求并协调工作流 | org.springframework.web.servlet.DispatcherServlet |
HandlerMapping | 请求与处理器(Handler)的映射关系(URL 到 Controller 方法的路由) | RequestMappingHandlerMapping, BeanNameUrlHandlerMapping |
HandlerAdapter | 执行 Handler 的实际工作,屏蔽不同 Handler 类型的差异 | RequestMappingHandlerAdapter, HttpRequestHandlerAdapter |
Handler | 具体业务处理器(通常标注 @Controller 的方法) | 用户编写的 Controller 类 |
ViewResolver | 将逻辑视图名解析为实际视图实现 | InternalResourceViewResolver, ThymeleafViewResolver |
View | 负责渲染输出(HTML/JSON/XML 等) | JstlView, MappingJackson2JsonView |
HandlerInterceptor | 面向切面的拦截器,实现 AOP 式控制 | 实现 HandlerInterceptor 接口的类 |
MultipartResolver | 文件上传处理 | StandardServletMultipartResolver |
LocaleResolver | 国际化支持 | SessionLocaleResolver |
ThemeResolver | 主题管理 | FixedThemeResolver |
组件协作全流程
流程解析
- 请求接收与路由阶段
- DispatcherServlet 接受到 HTTP 请求
- 遍历所有注册的 HandlerMapping
- RequestMappingHandlerMapping 匹配 URL 和请求方法
- 返回包含拦截器链的 HandlerExecutionChain
- 一个请求可能被多个 HandlerMapping 尝试匹配
- RequestMappingHandlerMapping 处理注解式控制器(主流方案)
- 返回的 HandlerExecutionChain 包含处理器+拦截器链
- 处理器执行阶段
- RequestMappingHandlerAdapter:反射调用 @Controller 方法
- HttpRequestHandlerAdapter:处理静态资源请求
- 实现处理器与框架的解耦
- 视图解析与渲染阶段
- REST 接口:HttpMessageConverter 直接序列化(JSON/XML)
- 传统 MVC:视图技术组合(如 Thymeleaf + HTML)