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

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

相关推荐
沉鱼.4436 分钟前
第十二届题目
java·前端·算法
赫瑞1 小时前
数据结构中的排列组合 —— Java实现
java·开发语言·数据结构
周末也要写八哥3 小时前
多进程和多线程的特点和区别
java·开发语言·jvm
惜茶3 小时前
vue+SpringBoot(前后端交互)
java·vue.js·spring boot
杰克尼4 小时前
springCloud_day07(MQ高级)
java·spring·spring cloud
NHuan^_^5 小时前
SpringBoot3 整合 SpringAI 实现ai助手(记忆)
java·人工智能·spring boot
Mr_Xuhhh6 小时前
从ArrayList到LinkedList:理解链表,掌握Java集合的另一种选择
java·数据结构·链表
错把套路当深情6 小时前
Java 全方向开发技术栈指南
java·开发语言
han_hanker6 小时前
springboot 一个请求的顺序解释
java·spring boot·后端
杰克尼6 小时前
SpringCloud_day05
后端·spring·spring cloud