用 「餐厅点餐」 的流程类比 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 作用
- 相当于 MVC 的总调度员,所有请求先经过它(类似餐厅前台)
@RequestMapping 原理
- HandlerMapping 通过注解建立 URL 与 Controller 方法的映射(类似服务员手里的菜单目录)
视图解析器链
- 可配置多个 ViewResolver(优先级决定视图匹配顺序)
拦截器(Interceptor)
- 在 Handler 执行前后插入逻辑(类似餐厅的安检和买单步骤)
四、记忆口诀
“一问二找三处理,四转五渲六响应”
- 问:DispatcherServlet接收请求
- 找:HandlerMapping找Controller
- 处理:Controller执行业务逻辑
- 转:HandlerAdapter适配调用
- 渲:ViewResolver解析视图
- 响应:返回渲染结果
实战示例:订单查询
// 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 的流程豁然开朗了? 😊