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

SpringMVC运行流 从请求发起到底层执行

作为Java Web开发中主流的MVC框架,SpringMVC的核心价值在于解耦请求处理、业务逻辑和视图展示,让开发更规范、更高效。

一、前置认知:SpringMVC核心组件

  • DispatcherServlet(前端控制器):SpringMVC的“总枢纽”,所有请求的入口和出口都经过它。负责接收请求、协调其他组件(HandlerMapping、ViewResolver等),不做具体业务处理,只负责调度。

  • HandlerMapping(处理器映射器):根据前端的URL,查找对应的HandlerAdapter「处理器执行链」(包含目标Controller方法和拦截器列表),核心是“找对要执行的Controller方法”。

  • HandlerAdapter(处理器适配器):适配并调用目标Controller方法,解耦DispatcherServlet和Controller,避免DispatcherServlet直接依赖具体的Controller实现。

  • Interceptor(拦截器):请求处理的“辅助工具”,分为前置、后置、完成后三个阶段,可做参数校验、登录拦截、日志记录、资源清理等工作。

  • ViewResolver(视图解析器):将Controller返回的「逻辑视图名」,拼接成页面的「物理地址」。

  • View(视图):最终要渲染的页面,负责将Controller处理后的业务数据,展示成前端可识别的静态页面(如HTML)。

二、SpringMVC完整运行流程

步骤1:前端发起请求,DispatcherServlet统一捕获

一切流程的起点,从前端发起请求开始:

  • 前端输入URL(如:http://localhost:8080/student/detail?stuNo=0001 )。

  • 请求首先发送到部署SpringMVC项目的Web服务器(如Tomcat),Tomcat会根据项目配置的拦截规则,将请求转发给SpringMVC的核心——DispatcherServlet

步骤2:HandlerMapping查找处理器执行链(核心:找对要执行的方法)

DispatcherServlet本身不处理业务,“找对能处理这个请求的方法”,是HandlerMapping的工作:

  • DispatcherServlet调用HandlerMapping组件,通过前置传入当前请求的URL和请求对象。

  • HandlerMapping会遍历循环执行每一个元素。

  • 同时,HandlerMapping会加载该请求对应的「拦截器列表」(包括前置拦截器,后置拦截器),最终将「目标Controller方法」和「拦截器列表」封装成一个「HandlerExecutionChain(处理器执行链)」,返回给DispatcherServlet。

步骤3:前置拦截器执行(请求校验、参数获取)

拿到处理器执行链后,不会直接执行Controller方法,而是先执行拦截器的前置方法

  • 前置拦截器的核心工作:获取前端传递的请求参数、校验参数合法性(比如校验stuNo是否为空、格式是否正确)等。

步骤4:HandlerAdapter调用目标Controller方法(核心业务处理)

前置拦截器通过后,进入核心业务处理环节——执行Controller方法:

  • DispatcherServlet通过HandlerAdapter(处理器适配器)间接调用目标Controller方法。

步骤5:后置拦截器执行
Controller方法执行完成后,会执行拦截器的后置方法:

  • 后置拦截器的核心工作:在视图渲染之前,修改Model中的业务数据、调整视图对象等。

步骤6:ViewResolver解析视图(逻辑地址→物理地址)

Controller返回的逻辑视图名,没有具体的页面路径,需要ViewResolver将其解析成真实的物理地址:

  • DispatcherServlet拿到逻辑视图名后,调用ViewResolver(视图解析器)组件。

  • ViewResolver解析后将拼接好的物理地址,封装成View对象,返回给DispatcherServlet。

步骤7:视图渲染(生成静态页面)

拿到View对象(物理地址)后,DispatcherServlet会 View 进行渲染视图,将业务数据展示到页面上:

  • DispatcherServlet根据物理地址,找到对应的视图文件。

步骤8:响应返回,流程结束

视图渲染完成后,整个请求流程进入最后一步——将静态页面返回给前端:

  • DispatcherServlet将渲染好的静态HTML页面,传递给Web服务器(Tomcat)。

  • Tomcat将HTML页面作为响应,返回给前端浏览器(或Vue/React页面)。

  • 前端浏览器解析HTML页面,渲染并展示给用户,整个SpringMVC运行流程正式结束。

三、流程总结(精简版,方便记忆)

最后,用一段精简的文字,总结SpringMVC的完整运行流程,方便快速记忆:

前端发URL → DispatcherServlet捕获 → HandlerMapping查找处理器执行链(Controller+拦截器) → 执行前置拦截器(参数校验) → HandlerAdapter调用Controller(业务处理,返回逻辑视图名) → 执行后置拦截器(数据优化) → ViewResolver解析视图(逻辑地址→物理地址) → 视图渲染(生成静态页面) → 静态页面返回前端 → 流程结束。

image

四、结尾

SpringMVC的运行流程,其核心就是“DispatcherServlet调度各组件,按顺序执行”。理解流程的关键,一是要分清每个核心组件的职责,二是要记住拦截器的执行顺序。

http://www.jsqmd.com/news/313591/

相关文章:

  • 全网热议!2026年二次元测量仪工厂TOP5推荐榜单,探寻最佳选择
  • 【零基础学MySQL】第二章:SQL类型 - 详解
  • 临床执医通关秘籍,我们选择哪一个医考机构?
  • 2026主管护师相关专业知识怎么备考?从基础到体系,一站式夯实备考功底
  • 微客云外卖霸王餐系统怎么样?有用过的吗
  • webpack - 常用的 CSS 加载器(webpack与其常见loader加载器使用方式)
  • 中医执助考试备考难?全网深度测评,帮你锁定最强机构!
  • 嘎嘎降AI vs 比话降AI:知网/维普/万方实测对比,选哪个更划算
  • 2026主管护师相关专业知识怎么备考?应试技巧+高频考点,快速提分通关攻略
  • 论文降AI不想被收录?这款工具承诺不公开不入库
  • 2026执业药师考试备考平台推荐:从口碑排行到性价比,这篇测评全说清
  • DeepSeek写的论文AI率太高?5分钟降到知网合格线以下
  • 2026执业药师考试备考平台推荐:考生真实实测对比,这份推荐清单很靠谱!
  • 2026 执业药师刷题 app 推荐:高口碑刷题工具实力榜出炉!
  • 2026 执业药师刷题 app 推荐:这三款靠谱推荐,备考效率翻倍!
  • HTML--段落换行下划线标签
  • 执业医师考试课程选这个,让你的备考效率翻倍!
  • 程序员的苦,你不懂
  • 手把手教你用Gemini 3.0 Flash自动生成游戏APP,小白也能30分钟搞定!
  • 【Agent从入门到实践】41 部署方式选型:本地脚本、Docker容器、云服务部署
  • AUTOSAR如何评估BSW模块裁剪的最小集合以满足轻量级ECU?
  • 配网两阶段鲁棒优化调度模型 关键词:两阶段鲁棒优化,CCG算法,储能 仿真算例采用33节点
  • HTML简介
  • MySQL大表优化实战:5大核心问题+6套落地解法(附SQL示例)
  • 一句话把 B 站视频合集变成教程网站,这是什么神仙操作 ?MiniMax Agent 的专家功能,值得一试!
  • 深入解析:简明教程:记录 Ubuntu系统命令行安装TexLive,配置vscode
  • 2026年养老机器人关键技术深度解析与主流品牌评测
  • 【Agent从入门到实践】42实战:用Docker打包Agent,实现一键部署
  • 为什么你的测试团队总在“重复造轮子”?
  • TestOps的“测试执行统计”:谁跑得最多?谁最稳定?