Spring MVC执行流程简介

Spring MVC 是一个基于 Java 的 Web 框架,其核心执行流程围绕 DispatcherServlet(前端控制器)展开。以下是详细的分步执行流程,结合了请求处理的关键组件:


1. 请求接收:DispatcherServlet 拦截请求

  • 所有 HTTP 请求首先被 DispatcherServlet(在 web.xml 或 Servlet 3.0+ 配置中定义)拦截。
  • 作用:作为中央调度器,统一接收请求并协调后续流程。

2. 处理器映射:HandlerMapping 查找处理器

  • DispatcherServlet 查询 HandlerMapping 组件。
  • 功能 :根据请求 URL(如 /user/list),找到对应的处理器(Controller 中的方法)。
  • 示例 :通过注解 @RequestMapping("/user/list") 映射到具体方法。

3. 处理器适配:HandlerAdapter 适配执行

  • 获取处理器后,DispatcherServlet 调用 HandlerAdapter
  • 作用 :适配不同类型的处理器(如基于注解的 @Controller 或传统的 Controller 接口),执行目标方法(如 userController.list())。

4. 处理器执行:Controller 处理业务逻辑

  • HandlerAdapter 调用 Controller 方法。
  • 流程
    • 参数解析HandlerMethodArgumentResolver 解析请求参数(如 @RequestParam@RequestBody)。
    • 业务处理:执行方法内的业务逻辑(如调用 Service 层)。
    • 返回结果 :返回 ModelAndView(视图 + 数据)或 String(视图名),若用 @ResponseBody 则返回数据对象。

5. 视图解析:ViewResolver 解析视图名

  • 若返回的是视图名(如 "userList"),DispatcherServlet 调用 ViewResolver
  • 功能 :将逻辑视图名转换为实际视图对象(如 JSP /WEB-INF/views/userList.jsp 或 Thymeleaf 模板)。

6. 视图渲染:View 渲染输出

  • 获取 View 对象后,进行渲染:
    • 模型填充:将 Controller 返回的模型数据合并到视图中。
    • 生成响应:生成 HTML/JSON/XML 等响应内容。
    • 输出响应 :通过 HttpServletResponse 返回给客户端。

7. 请求结束:返回响应

  • 最终响应返回客户端,流程结束。

关键扩展点

  1. 拦截器 (Interceptor)

    • 在处理器执行前后插入逻辑(如权限验证)。
    • 执行顺序:
      preHandle() → Controller → postHandle() → 视图渲染 → afterCompletion()
  2. 参数解析器 (HandlerMethodArgumentResolver)

    • 解析 Controller 方法参数(如 @RequestParam@PathVariable)。
  3. 返回值处理器 (HandlerMethodReturnValueHandler)

    • 处理 @ResponseBodyModel 等返回值。
  4. 异常处理 (HandlerExceptionResolver)

    • 统一处理 Controller 抛出的异常(如 @ExceptionHandler)。

流程图概要

plaintext 复制代码
客户端请求
    ↓
DispatcherServlet(拦截请求)
    ↓
HandlerMapping(查找处理器)
    ↓
HandlerAdapter(适配执行)
    ↓
Controller(处理业务逻辑,返回结果)
    ↓
ViewResolver(解析视图名)
    ↓
View(渲染视图)
    ↓
返回响应至客户端

注解驱动简化流程

现代 Spring MVC 大量使用注解简化开发:

  • @Controller / @RestController:声明处理器类。
  • @RequestMapping / @GetMapping:映射请求路径。
  • @ResponseBody:直接返回 JSON/XML 数据(跳过视图解析)。

特点总结

  • 松耦合 :各组件职责单一(如 HandlerMapping 只负责映射)。
  • 扩展性强 :支持自定义 ViewResolverHandlerAdapter 等。
  • 集成便捷:无缝整合 Spring IoC、AOP 等功能。

通过这一流程,Spring MVC 实现了灵活的请求处理机制,开发者只需关注业务逻辑,无需处理底层通信细节。

相关推荐
Miraitowa_cheems37 分钟前
LeetCode算法日记 - Day 59: 字母大小写全排列、优美的排列
java·数据结构·算法·leetcode·决策树·职场和发展·深度优先
workflower1 小时前
将图片中的图形转换为可编辑的 PPT 图形
java·开发语言·tomcat·powerpoint·个人开发·结对编程
卡戎-caryon2 小时前
【Java SE】06. 数组
java·开发语言
想躺平的咸鱼干2 小时前
Spring AI Alibaba
java·人工智能·spring
老华带你飞3 小时前
学生信息管理系统|基于Springboot的学生信息管理系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·学生信息管理系统
聪明的笨猪猪3 小时前
Java SE “泛型 + 注解 + 反射”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
磨十三3 小时前
C++ 类型转换全面解析:从 C 风格到 C++ 风格
java·c语言·c++
Zzzzmo_3 小时前
Java数据结构:ArrayList与顺序表2
java·数据结构
Fency咖啡3 小时前
Spring 基础核心 - SpringMVC 入门与请求流程
java·后端·spring·mvc
FrankYoou3 小时前
Spring Boot 自动配置之 Spring transaction
java·spring boot·spring