说一下 SpringMVC的运行流程?

发布于:2025-02-27 ⋅ 阅读:(17) ⋅ 点赞:(0)

「餐厅点餐」 的流程类比 SpringMVC,5 步轻松掌握核心流程:


一、SpringMVC 核心流程(配图+代码示例)

想象你去一家餐厅吃饭的全过程:

步骤 类比 SpringMVC 组件 关键代码示例
1. 顾客进店 顾客走到门口 DispatcherServlet(前端控制器)接收请求 web.xml 配置 DispatcherServlet
2. 接待分配 服务员查预订表 HandlerMapping 查找对应 Controller @RequestMapping("/order")
3. 厨师做菜 厨房处理订单 Controller 调用业务逻辑,返回 ModelAndView model.addAttribute(“food”, “牛排”);
4. 传菜窗口 菜品交给传菜员 HandlerAdapter 适配不同 Controller(如注解型 vs XML配置) 自动处理无需编码
5. 摆盘上桌 摆盘后送到顾客面前 ViewResolver 解析视图(如 JSP/Thymeleaf) application.properties 配置视图前缀

二、详细流程拆解(含时序图关键点)

浏览器 DispatcherServlet HandlerMapping HandlerAdapter Controller ViewResolver HTTP 请求(如 /order) 问:哪个Controller处理? 返回Handler(Controller方法) 调用HandlerAdapter 执行Controller方法 返回ModelAndView 返回结果 解析视图名 返回具体视图(如 menu.jsp) 渲染视图并响应 浏览器 DispatcherServlet HandlerMapping HandlerAdapter Controller ViewResolver

三、高频面试考点

  1. DispatcherServlet 作用

    • 相当于 MVC 的总调度员,所有请求先经过它(类似餐厅前台)
  2. @RequestMapping 原理

    • HandlerMapping 通过注解建立 URL 与 Controller 方法的映射(类似服务员手里的菜单目录)
  3. 视图解析器链

    • 可配置多个 ViewResolver(优先级决定视图匹配顺序)
  4. 拦截器(Interceptor)

    • 在 Handler 执行前后插入逻辑(类似餐厅的安检和买单步骤)

四、记忆口诀

“一问二找三处理,四转五渲六响应”

  1. 问:DispatcherServlet接收请求
  2. 找:HandlerMapping找Controller
  3. 处理:Controller执行业务逻辑
  4. 转:HandlerAdapter适配调用
  5. 渲:ViewResolver解析视图
  6. 响应:返回渲染结果

实战示例:订单查询

// 1. Controller 定义
@Controller
public class OrderController {
    @GetMapping("/order")
    public String getOrder(Model model) {
        model.addAttribute("orderId", 1001); // 数据存Model
        return "orderDetail"; // 2. 视图名交给ViewResolver解析
    }
}

// 3. ViewResolver配置(Thymeleaf示例)
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

通过餐厅的类比,是不是对 SpringMVC 的流程豁然开朗了? 😊