下面按面试 / 实战 都高频的维度,把 Spring MVC 核心知识 系统梳理一遍,覆盖原理 + 关键组件 + 常考点。
一、Spring MVC 是什么
Spring MVC 是 Spring Framework 提供的一个 基于 MVC 设计模式的 Web 框架 ,用于构建 基于 HTTP/REST 的服务端应用。
核心目标:
- 请求 → 控制器 → 业务 → 视图 / JSON
- 解耦 请求处理、业务逻辑、视图渲染
- 与 Spring IoC / AOP 深度整合
二、核心架构 & 请求流程(必考)



请求完整执行流程
-
客户端请求 →
DispatcherServlet -
DispatcherServlet→ HandlerMapping -
找到对应的 Controller + Method
-
HandlerAdapter调用 Controller 方法 -
执行:
- 参数绑定
- 数据校验
-
返回:
ModelAndView- 或直接返回 JSON
-
ViewResolver 解析视图(如 JSP / Thymeleaf)
-
响应客户端
一句话总结
DispatcherServlet 是 Spring MVC 的"中央调度器"。
三、核心组件(重点背)
1. DispatcherServlet(核心)
-
前端控制器
-
所有请求的统一入口
-
负责:
- 请求分发
- 组件协调
- 异常处理
2. HandlerMapping(映射器)
作用: 请求 URL → Controller 方法
常见实现:
RequestMappingHandlerMapping(最常用)SimpleUrlHandlerMapping
3. HandlerAdapter(适配器)
作用: 真正调用 Controller 方法
为什么要有 Adapter?
Controller 形式不统一,需要适配调用方式
常见实现:
RequestMappingHandlerAdapter
4. Controller(控制器)
-
使用
@Controller/@RestController -
处理请求,调用 Service
-
返回:
- 视图名
- JSON 数据
5. ViewResolver(视图解析器)
-
逻辑视图名 → 实际视图
-
常见:
InternalResourceViewResolver(JSP)- ThymeleafViewResolver
前后端分离项目中几乎不用
四、常用核心注解(面试必问)
1. 请求映射类
| 注解 | 作用 |
|---|---|
@RequestMapping |
通用映射 |
@GetMapping |
GET |
@PostMapping |
POST |
@PutMapping |
PUT |
@DeleteMapping |
DELETE |
java
@GetMapping("/users/{id}")
public User get(@PathVariable Long id) { }
2. 参数绑定类
| 注解 | 作用 |
|---|---|
@RequestParam |
URL 参数 |
@PathVariable |
路径变量 |
@RequestBody |
JSON → 对象 |
@RequestHeader |
请求头 |
@CookieValue |
Cookie |
3. 返回值相关
| 注解 | 作用 |
|---|---|
@ResponseBody |
返回 JSON |
@RestController |
= Controller + ResponseBody |
五、参数绑定 & 数据转换(高频)
1. 参数绑定原理
-
基于 JavaBean 规范
-
通过 反射 + Setter
-
支持:
- 基本类型
- 对象
- List / Map
java
@PostMapping("/add")
public void add(User user) { }
2. 类型转换
- 内置
Converter - 日期格式处理:
java
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
六、数据校验(@Valid)
1. JSR-303 校验
java
@PostMapping("/save")
public void save(@Valid @RequestBody User user,
BindingResult result) { }
常用注解:
| 注解 | 说明 |
|---|---|
@NotNull |
非空 |
@NotBlank |
非空字符串 |
@Size |
长度 |
@Min / @Max |
数值范围 |
@Email |
邮箱 |
七、异常处理机制(必考)
1. @ExceptionHandler(局部)
java
@ExceptionHandler(RuntimeException.class)
@ResponseBody
public Result error(Exception e) { }
2. @ControllerAdvice(全局,推荐)
java
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public Result error(Exception e) {
return Result.fail(e.getMessage());
}
}
企业项目标配
八、拦截器 Interceptor(对比 Filter)
1. 执行时机
| 方法 | 说明 |
|---|---|
preHandle |
进入 Controller 前 |
postHandle |
Controller 后,视图前 |
afterCompletion |
请求完成 |
2. Filter vs Interceptor
| 对比项 | Filter | Interceptor |
|---|---|---|
| 规范 | Servlet | Spring |
| 作用范围 | 所有请求 | Controller |
| 注入 Bean | ❌ | ✅ |
| 推荐使用 | 低 | 高 |
九、Spring MVC 与 Spring Boot 的关系
-
Spring Boot 内置并自动配置 Spring MVC
-
无需:
- web.xml
- DispatcherServlet 配置
-
核心仍然是 Spring MVC
java
@SpringBootApplication
十、Spring MVC 高频面试题速答
Q1:DispatcherServlet 作用?
前端控制器,统一请求入口
Q2:@Controller 和 @RestController 区别?
RestController = Controller + ResponseBody
Q3:参数是如何绑定的?
反射 + JavaBean + 数据绑定器
Q4:Spring MVC 如何处理异常?
@ExceptionHandler + @ControllerAdvice
Q5:Interceptor 用途?
登录校验、权限、日志、性能统计