Spring MVC执行流程是“前端请求→框架调度→控制器处理→视图渲染”的闭环,核心由DispatcherServlet协调各组件:接收请求、通过HandlerMapping定位Handler、交由HandlerAdapter调用控制器方法、经ViewResolver解析逻辑视图并渲染响应。

Spring MVC 的执行流程本质是“前端请求 → 框架调度 → 控制器处理 → 视图渲染”的闭环。核心在于 DispatcherServlet 作为中央调度器,协调各组件完成请求分发与响应组装。理解它不靠死记步骤,而要抓住“谁在什么时候做了什么”。
DispatcherServlet 接收并分发请求
所有 HTTP 请求(默认配置下)首先被前端控制器 DispatcherServlet 拦截。它本身不处理业务,只做三件事:
- 根据请求 URL 查找匹配的 HandlerMapping(比如 @RequestMapping 注解映射)
- 找到对应的 Handler(通常是 @Controller 中的方法)
- 把请求交给 HandlerAdapter 去真正调用该方法
HandlerAdapter 调用控制器方法
HandlerAdapter 是适配器角色,屏蔽不同处理器类型的差异。例如:
- 对
@Controller类中的@RequestMapping方法,用RequestMappingHandlerAdapter - 它负责解析参数(如 @RequestParam、@RequestBody)、注入 Model、执行拦截器 preHandle
- 调用目标方法后,获取返回值(String、ModelAndView、ResponseEntity 等)
视图解析与渲染(ViewResolver + View)
控制器方法返回逻辑视图名(如 "user/list")后,流程进入视图阶段:
- ViewResolver(如 InternalResourceViewResolver)将逻辑名转为真实视图路径(如 /WEB-INF/views/user/list.jsp)
- 找到对应 View 实例(JSP、Thymeleaf 模板、JSON 视图等)
- 将 Model 数据(Map 形式)传入 View,由视图技术完成渲染(生成 HTML 或 JSON 字符串)
拦截器与异常统一处理
实际项目中,这两类机制常嵌入主流程:
- HandlerInterceptor 可在 preHandle(调用前)、postHandle(渲染前)、afterCompletion(响应后)插入逻辑(鉴权、日志、性能统计)
- @ExceptionHandler 或 @ControllerAdvice 捕获控制器抛出的异常,返回友好错误页或 JSON 提示
基本上就这些。流程看似线性,但每个环节都支持高度定制(比如自定义 HandlerMapping、替换视图技术、添加多个拦截器)。掌握主线后,再按需深入组件细节会更高效。










