Spring MVC 核心知识

下面按面试 / 实战 都高频的维度,把 Spring MVC 核心知识 系统梳理一遍,覆盖原理 + 关键组件 + 常考点


一、Spring MVC 是什么

Spring MVC 是 Spring Framework 提供的一个 基于 MVC 设计模式的 Web 框架 ,用于构建 基于 HTTP/REST 的服务端应用

核心目标:

  • 请求 → 控制器 → 业务 → 视图 / JSON
  • 解耦 请求处理、业务逻辑、视图渲染
  • 与 Spring IoC / AOP 深度整合

二、核心架构 & 请求流程(必考)

请求完整执行流程

  1. 客户端请求DispatcherServlet

  2. DispatcherServletHandlerMapping

  3. 找到对应的 Controller + Method

  4. HandlerAdapter 调用 Controller 方法

  5. 执行:

    • 参数绑定
    • 数据校验
  6. 返回:

    • ModelAndView
    • 或直接返回 JSON
  7. ViewResolver 解析视图(如 JSP / Thymeleaf)

  8. 响应客户端

一句话总结

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 用途?

登录校验、权限、日志、性能统计

相关推荐
weisian1514 小时前
JVM--2-打破刻板印象:在Java中创建一个对象,一定是分配到堆内存吗?
java·开发语言·jvm·tlab·逃逸分析·标量替换
一起养小猫4 小时前
Flutter for OpenHarmony 实战:网络请求与JSON解析完全指南
网络·jvm·spring·flutter·json·harmonyos
onkel in blog4 小时前
【Java】Gradle 多模块项目实战:Spring Boot 微服务搭建全流程
java·spring boot·微服务·gradle
想要一只奶牛猫4 小时前
Spring IOC&DI(上)
java·后端·spring
cyforkk4 小时前
10、Java 基础硬核复习:多线程(并发核心)的核心逻辑与面试考点
java·开发语言·面试
Remember_9934 小时前
Java 工厂方法模式:解耦对象创建的优雅方案
java·开发语言·python·算法·工厂方法模式
小楼v4 小时前
使用Nacos实现动态IP黑名单过滤
java·后端·微服务·nacos
A懿轩A4 小时前
【Java 基础编程】Java 运算符完全指南:算术/关系/逻辑/位运算与优先级,避免常见坑
java·开发语言
时艰.4 小时前
Java 并发编程核心知识点
java·开发语言