当前位置: 首页 > news >正文

说一下 SpringMVC的运行流程?

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


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

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

步骤类比SpringMVC 组件关键代码示例
1. 顾客进店顾客走到门口DispatcherServlet(前端控制器)接收请求web.xml 配置 DispatcherServlet
2. 接待分配服务员查预订表HandlerMapping 查找对应 Controller@RequestMapping("/order")
3. 厨师做菜厨房处理订单Controller 调用业务逻辑,返回 ModelAndViewmodel.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 的流程豁然开朗了? 😊

相关文章:

  • 代码随想录算法【Day54】
  • 系统架构设计:软件测试需要掌握的常用方法
  • pytorch阶段性总结1
  • 前端模拟请求池-浏览器同时发起大量请求
  • mysql 拼接多行合并为一行
  • 入门网络安全工程师要学习哪些内容【2025年寒假最新学习计划】
  • 机试刷题_HJ106 字符逆序【python】
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.1.2典型应用场景:日志分析、实时搜索、推荐系统
  • Redis|事务
  • 网络七层模型—OSI参考模型详解
  • Fiddler在Windows下抓包Https
  • HGAME2025 Week1
  • 尚硅谷爬虫note13
  • 一张表解释01背包问题
  • js:根据后端返回的数组取出每一个数组的keyword字段然后拼接成一个逗号分隔的字符串
  • 总结前端常用数据结构 之 栈篇【JavaScript 】
  • ipe网络安全
  • 30.C++多态 3 (多态的原理,虚指针,虚函数表,抽象类)
  • Python学习第十七天之PyTorch保姆级安装
  • 数据结构与算法-图论-最短路-拓展运用
  • 马鞍山市原常务副市长黄化锋一审获刑11年,涉案金额三千余万元
  • 高培勇:中国资本市场的发展应将预期因素全面纳入分析和监测体系
  • 巴基斯坦称未违反停火协议
  • 黑灰产工作室为境外诈骗集团养号引流,冒充美女与男性裸聊后敲诈勒索
  • 巴基斯坦外长:近期军事回应是自卫措施
  • 西甲上海足球学院揭幕,用“足球方法论”试水中国青训