Java外功基础(1)——Spring Web MVC

Java 外功基础(1) —— Spring Web MVC

在 Java 后端开发中,Spring Web MVC 仍然是 2025–2026 年最主流、最广泛使用的 Web 框架内核(即使你现在主要写 Spring Boot、Spring Cloud,也绕不开它)。

Spring Boot 把配置极大简化了,但核心思想、组件关系、请求处理流程、核心组件的职责这些“外功”没有变。
真正写出高质量、可维护、可诊断的 Spring Web 项目,对 MVC 底层原理的理解程度决定了你的上限。

一、Spring Web MVC 核心架构图(最重要的一张图)

客户端请求
      ↓
DispatcherServlet  ← 前端控制器(唯一入口)
      ↓
HandlerMapping  ← 根据 URL、方法、参数等找到 Handler(Controller 方法)
      ↓
HandlerAdapter  ← 适配器(调用真正的 Controller 方法)
      ↓
Controller(@Controller / @RestController) ← 你的业务代码
      ↓
ViewResolver(视图解析器) ← 决定返回什么视图(JSP/Thymeleaf)或直接写响应体(JSON)
      ↓
View / ResponseBody  ← 最终输出(HTML / JSON / 文件流等)
      ↑
异常处理(@ExceptionHandler / HandlerExceptionResolver)

一句话总结
DispatcherServlet 是中央调度员,它把所有请求接管过来,然后通过一系列组件(Mapping → Adapter → Controller → Resolver)完成“找到谁处理 → 怎么处理 → 返回什么”的全流程。

二、Spring MVC 九大核心组件(2025 年仍然有效)

序号组件名称全称 / 接口主要职责是否必须自己配(Boot 默认)面试高频程度
1DispatcherServlet前端控制器整个 MVC 的入口,接收所有请求Boot 自动注册★★★★★
2HandlerMappingHandler 映射器根据请求找到对应的 Handler(Controller 方法)Boot 默认有很多实现★★★★☆
3HandlerAdapterHandler 适配器真正调用 Controller 方法的执行者Boot 默认★★★★☆
4HandlerExceptionResolver异常解析器统一处理 Controller 抛出的异常Boot 默认 + 可自定义★★★★☆
5ViewResolver视图解析器把逻辑视图名解析成真实视图(或 JSON)Boot 默认(Thymeleaf 等)★★★☆☆
6View视图接口最终渲染输出(HTML / JSON / PDF 等)★★☆☆☆
7MultipartResolver文件上传解析器处理 multipart/form-data 请求Boot 默认★★★☆☆
8LocaleResolver国际化解析器确定当前请求的语言环境Boot 默认★★☆☆☆
9ThemeResolver主题解析器支持换皮肤(现在很少用)Boot 默认★☆☆☆☆

最常被问的三个组件

  1. HandlerMapping → RequestMappingHandlerMapping(@RequestMapping 解析)
  2. HandlerAdapter → RequestMappingHandlerAdapter(执行 Controller 方法)
  3. ViewResolver → ContentNegotiatingViewResolver(内容协商)/ ThymeleafViewResolver

三、一次完整 HTTP 请求的执行流程(面试八股文)

  1. 用户发送请求 → Tomcat → DispatcherServlet(web.xml 或 Boot 自动注册)
  2. DispatcherServlet 调用 HandlerMapping → 得到 HandlerExecutionChain(包含 Controller 方法 + 拦截器)
  3. DispatcherServlet 调用 HandlerAdapter → 执行 Controller 方法
  • 解析 @RequestParam、@PathVariable、@RequestBody
  • 进行参数绑定、类型转换、校验
  • 执行目标方法
  1. Controller 返回值(ModelAndView / @ResponseBody / ResponseEntity 等)
  2. 如果是视图名 → ViewResolver 解析 → 渲染 View
  3. 如果是 @ResponseBody → HttpMessageConverter 转成 JSON/XML 等
  4. 响应写回客户端
  5. 过程中任何异常 → HandlerExceptionResolver 处理(@ExceptionHandler / @ControllerAdvice)

四、2025–2026 年最常考的 10 个核心知识点(建议全部掌握)

  1. @Controller vs @RestController 的本质区别(后者 = 前者 + @ResponseBody)
  2. @RequestMapping 的各种写法(method、params、headers、consumes、produces)
  3. 内容协商(Content Negotiation)机制(Accept 头决定返回 JSON/HTML)
  4. @RequestBody vs @ResponseBody vs HttpMessageConverter
  5. Spring MVC 的参数绑定机制(WebDataBinder)
  6. @PathVariable@RequestParam@RequestHeader@CookieValue@ModelAttribute 区别
  7. @ControllerAdvice + @ExceptionHandler 全局异常处理
  8. 文件上传(MultipartFile)完整流程 + 大文件分片上传思路
  9. 拦截器(HandlerInterceptor) vs 过滤器(Filter) vs AOP 的区别
  10. Spring Boot 如何自动配置 DispatcherServlet(WebMvcAutoConfiguration)

五、现代 Spring Boot 项目中常见的简化写法(2025–2026 风格)

@RestController
@RequestMapping("/api/v1/orders")
@RequiredArgsConstructor
public class OrderController {

    private final OrderService orderService;

    @PostMapping
    public ApiResult<OrderVO> createOrder(
            @Valid @RequestBody OrderCreateDTO dto,
            @AuthenticationPrincipal UserPrincipal user) {

        return ApiResult.success(orderService.create(dto, user.getId()));
    }

    @GetMapping("/{id}")
    public ApiResult<OrderDetailVO> getOrderDetail(
            @PathVariable Long id,
            @RequestHeader(value = "X-Trace-Id", required = false) String traceId) {

        return ApiResult.success(orderService.getDetail(id));
    }

    @ExceptionHandler(OrderNotFoundException.class)
    public ResponseEntity<ApiResult<?>> handleOrderNotFound(OrderNotFoundException ex) {
        return ResponseEntity.status(404)
                .body(ApiResult.error("订单不存在", ex.getMessage()));
    }
}

六、小结与进阶路线

Spring Web MVC 的外功核心在于:

  • 理解 DispatcherServlet 是单例,所有请求都走它
  • 掌握 HandlerMapping → Adapter → Controller → ViewResolver 这条主链路
  • 搞清楚 参数绑定、消息转换、异常处理 三大扩展点
  • 熟练使用 @ControllerAdvice、拦截器、过滤器 做统一处理

进阶学习顺序建议(2026 年推荐)

  1. 手写一次最简 DispatcherServlet(理解流程)
  2. 掌握 @ControllerAdvice + 全局异常 + 统一响应结构
  3. 深入 HttpMessageConverter + 自定义序列化(Jackson 配置)
  4. 实现文件分片上传 + 断点续传
  5. 学习 Spring Security + OAuth2 与 MVC 的集成
  6. 理解 WebFlux 与 MVC 的本质区别(响应式 vs 阻塞式)

重阳,你现在对 Spring MVC 最想补哪一块?

  • 请求流程细节(源码级)
  • 参数绑定与类型转换
  • 异常处理体系
  • 文件上传/下载完整方案
  • 拦截器 vs Filter vs AOP 实战区别
  • 还是直接来一道真实面试题拆解?

告诉我你的痛点或方向~

文章已创建 4206

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部