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

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

相关推荐
编程小白gogogo5 小时前
苍穹外卖图片不显示解决教程
java·spring boot
舟舟亢亢6 小时前
算法总结——二叉树【hot100】(上)
java·开发语言·算法
百锦再6 小时前
Java中的char、String、StringBuilder与StringBuffer 深度详解
java·开发语言·python·struts·kafka·tomcat·maven
努力努力再努力wz7 小时前
【Linux网络系列】:TCP 的秩序与策略:揭秘传输层如何从不可靠的网络中构建绝对可靠的通信信道
java·linux·开发语言·数据结构·c++·python·算法
yy.y--8 小时前
Java数组逆序读写文件实战
java·开发语言
BD_Marathon9 小时前
IDEA创建多级包时显示在同一行怎么办
java·ide·intellij-idea
亓才孓9 小时前
【Exception】CONDITIONS EVALUATION REPORT条件评估报告
java·开发语言·mybatis
硅基动力AI9 小时前
如何判断一个关键词值不值得做?
java·前端·数据库
重生之后端学习10 小时前
78. 子集
java·数据结构·算法·职场和发展·深度优先
那起舞的日子10 小时前
斐波那契数列
java·算法