谈谈SpringMVC底层原理
一、什么是SpringMVC之前一直觉得会使用框架就懂了但其实底层原理我们也要清楚这样使用的时候就会更加有逻辑而不是只停留在表面SpringMVC是Spring生态体系内置的MVC分层Web请求处理框架底层基于原生Servlet规范实现核心入口为DispatcherServlet中央调度器。 它专门用于服务端接收HTTP请求、参数绑定、调用业务层、封装返回结果是传统SSM框架、现代SpringBoot后端接口开发的Web底层支撑所有SpringBoot Web接口本质底层都在运行SpringMVC。MVC三层拆分含义Model模型封装业务数据、数据库查询结果对应项目中的Service、DAO、实体类View视图页面展示层如JSP、Thymeleaf、HTML模板前后端分离项目几乎舍弃视图层统一返回JSONController控制器接收前端请求协调Model与View处理请求分发逻辑开发者编写的RestController/Controller即为控制器。二、SpringMVC核心特点与优势1. 基于注解开发无强制类继承约束原生Servlet开发必须继承HttpServlet重写doGet/doPost方法耦合度极高 SpringMVC仅通过Controller、RestController标记普通POJO类即可作为控制器无需继承任何框架类、实现接口代码轻量化、低耦合。2. 分层解耦职责单一整套框架拆分多个独立组件调度器、处理器映射器、处理器适配器、视图解析器每个组件只负责一件事符合单一职责原则组件可灵活替换扩展。3. 原生支持RESTful接口规范提供GetMapping、PostMapping、PutMapping、DeleteMapping系列注解天然支持REST风格接口设计搭配RestController快速实现前后端分离JSON返回。4. 内置拦截器机制统一请求增强提供HandlerInterceptor拦截器可在Controller执行前后、请求结束后自定义逻辑用于登录校验、权限拦截、日志记录区别于Servlet过滤器Filter仅作用于SpringMVC内部请求。5. 强大的参数自动绑定与类型转换前端表单、URL路径参数、JSON请求体框架自动封装到实体类自动完成字符串、数字、日期等类型转换无需手动通过request.getParameter()取值。6. 容器统一管理依托Spring IOC所有Controller、拦截器、工具组件都交由Spring IOC容器管理自动实现依赖注入Controller可直接注入Service、Mapper无需手动创建对象。7. 灵活的视图解析机制内置InternalResourceViewResolver视图解析器自动拼接页面前缀后缀传统服务端渲染项目可快速跳转页面前后端分离场景直接跳过视图解析序列化对象返回JSON。三、核心组件对应图讲解结合流程图图片来源于网络先梳理图中全部核心组件明确每个组件定位DispatcherServlet中央调度器SpringMVC总入口所有HTTP请求第一道关口全局总指挥本质是HttpServlet子类底层依托Servlet运行。HandlerMapping 处理器映射器只做查询工作根据请求URL匹配对应Controller方法封装成处理器执行链返回。HandlerExecutionChain 处理器执行链封装目标HandlerController方法 全部拦截器集合类比过滤器链。HandlerAdapter 处理器适配器统一执行规范适配不同类型Controller真正调用Controller业务方法。Handler(Controller) 处理器开发者编写的接口业务类调用Service操作数据库。ModelAndView封装Controller返回的数据(Model)与视图名称(View)前后端分离项目不会生成该对象。ViewResolver 视图解析器拼接页面路径定位前端视图文件。View 视图页面模板渲染数据并生成最终页面返回浏览器。四、基于流程图的完整11步执行流程步骤1浏览器发起HTTP请求前端通过URL发送GET/POST/PUT/DELETE请求请求抵达服务端首先进入DispatcherServlet中央调度器。补充SSM需要在web.xml手动注册DispatcherServletSpringBoot通过自动配置WebMvcAutoConfiguration自动创建注册无需XML配置。步骤2DispatcherServlet调用HandlerMapping处理器映射器调度器将当前请求交给HandlerMapping核心作用解析当前请求URL扫描项目中所有Controller匹配该URL对应的目标业务方法。步骤3HandlerMapping返回HandlerExecutionChain执行链匹配完成后映射器返回一条执行链包含两部分Handler目标Controller方法拦截器数组当前请求需要执行的所有Interceptor拦截器。步骤4DispatcherServlet调用HandlerAdapter处理器适配器调度器拿到执行链后不直接执行Controller交给适配器。 设计适配器的原因SpringMVC支持多种类型控制器注解Controller、传统Controller适配器统一封装调用逻辑调度器无需关心Controller底层实现。步骤5HandlerAdapter调用目标HandlerController适配器按照统一反射逻辑执行匹配到的Controller接口方法自动完成请求参数封装、类型转换。步骤6Controller调用Service、DAO操作数据库控制器执行业务逻辑调用Service层处理业务DAO层查询/修改数据库拿到业务结果数据。步骤7Controller返回ModelAndView对象传统服务端渲染JSP/Thymeleaf方法返回数据视图名称封装为ModelAndViewModel存放页面所需数据View代表页面文件名。前后端分离项目RestController方法添加ResponseBody直接返回实体对象、字符串框架使用Jackson自动序列化为JSON不会生成ModelAndView直接跳过视图解析流程。步骤8DispatcherServlet调用ViewResolver视图解析器仅传统页面项目会执行此步骤调度器将ModelAndView交给视图解析器自动拼接页面前缀、后缀找到服务器存放的真实视图文件。 例视图名为user前缀/templates/后缀.html最终定位/templates/user.html。步骤9视图解析器返回View视图对象解析完成后返回封装好路径的视图对象。步骤10View执行视图渲染框架将Model中存储的业务数据填充到HTML/JSP页面完成页面渲染生成完整静态页面。步骤11DispatcherServlet向前端返回HTTP响应页面项目将渲染完成的HTML页面作为响应返回浏览器前后端分离项目直接返回JSON字符串无视图渲染步骤。五、流程关键补充知识点面试高频拓展1. 拦截器Interceptor执行时机内嵌在执行链中一条完整请求中拦截器执行顺序preHandleController执行前返回false直接拦截请求流程终止postHandleController执行完毕视图渲染之前afterCompletion整个请求全部结束资源释放、日志记录。拦截器属于SpringMVC自有组件仅DispatcherServlet内部生效Filter过滤器属于Servlet原生规范先执行Filter再进入DispatcherServlet最后执行拦截器。2. HandlerMapping与HandlerAdapter的分工区别HandlerMapping只负责查找根据URL找到Controller不执行任何业务代码HandlerAdapter只负责执行统一调用Controller方法不做匹配查找。3. Controller 和 RestController 对流程的影响Controller无自动JSON转换方法返回字符串会进入视图解析流程跳转页面如需返回JSON方法上加ResponseBodyRestController Controller ResponseBody类内所有方法自动序列化对象为JSON直接跳过步骤8、9、10不执行视图渲染适配前后端分离开发。4. url-pattern / 和 /* 的区别SSM配置DispatcherServlet拦截路径/拦截所有普通HTTP请求不拦截.jsp页面是标准配置/*拦截包含JSP在内的全部请求会导致页面被控制器拦截页面404禁止使用。5. Spring两级容器关系Spring存在父子容器父容器根容器管理Service、Mapper、工具BeanDispatcherServlet子容器管理Controller、拦截器 子容器可获取父容器所有Bean父容器无法访问子容器BeanSpringBoot自动整合两级容器无需手动配置。六、总结SpringMVC依托Servlet实现以DispatcherServlet为调度核心通过分层组件拆分请求处理全流程实现了请求分发、参数绑定、业务调用、视图渲染完整能力。 对比原生Servlet它依托注解简化开发、分层解耦、支持REST接口如今SpringBoot虽大幅简化配置但Web开发底层依旧完全依赖SpringMVC整套执行逻辑。

相关新闻

New Eden Faces安全防护:防止投票作弊与数据验证的最佳实践

New Eden Faces安全防护:防止投票作弊与数据验证的最佳实践

New Eden Faces安全防护:防止投票作弊与数据验证的最佳实践 【免费下载链接】newedenfaces-react Character voting app for EVE Online 项目地址: https://gitcode.com/gh_mirrors/ne/newedenfaces-react New Eden Faces作为EVE Online的角色投票应用&#…

2026/9/30 21:27:55 阅读更多 →
HarmonyOS应用开发实战:小事记 - 文本显示与排版:Text/TextInput/TextArea 的富文本与溢出处理

HarmonyOS应用开发实战:小事记 - 文本显示与排版:Text/TextInput/TextArea 的富文本与溢出处理

前言 文本组件是应用中最基础也最常用的 UI 元素。HarmonyOS 提供了 Text(显示文本)、TextInput(单行输入)和 TextArea(多行输入)三种文本组件,分别满足不同的文本展示和输入需求。本文以小事记…

2026/9/29 18:24:52 阅读更多 →
TVBOX家庭影院智能升级与性能优化全攻略

TVBOX家庭影院智能升级与性能优化全攻略

1. TVBOX观景神器解析:家庭影院的智能升级方案 TVBOX作为近年来家庭娱乐领域的现象级产品,正在重新定义普通家庭的观影体验。与传统电视盒子相比,TVBOX在硬件配置、内容聚合和交互体验上都实现了质的飞跃。我经手测试过市面上二十余款主流TVB…

2026/9/26 3:46:56 阅读更多 →

最新新闻

替加环素广谱抗生素解析:从甘氨酰环素机制到 TaoToken 配置实践

替加环素广谱抗生素解析:从甘氨酰环素机制到 TaoToken 配置实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 22:56:56 阅读更多 →
UE32绿色版配置TaoToken:用*.reg文件手动增删注册表项

UE32绿色版配置TaoToken:用*.reg文件手动增删注册表项

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 22:56:56 阅读更多 →
AI工程的进化密码:Harness Engineering让模型调用不再是终点,Agent系统才是新起点!

AI工程的进化密码:Harness Engineering让模型调用不再是终点,Agent系统才是新起点!

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 22:56:56 阅读更多 →
汽车电子能力图谱:从电源树到CAN诊断的实战方法论

汽车电子能力图谱:从电源树到CAN诊断的实战方法论

1. 为什么“汽车电子知识大百科”不是一本词典,而是一套动态能力图谱 “汽车电子知识大百科”——光看标题,很多人第一反应是:哦,又一本堆砌术语的工具书?查查ESP、CAN总线、BMS这些词的定义就完事了?我干这…

2026/9/30 22:55:55 阅读更多 →
嵌入式Linux驱动开发实战:核心任务、调试技巧与学习路线

嵌入式Linux驱动开发实战:核心任务、调试技巧与学习路线

最近后台经常有人问我:“嵌入式驱动开发一天到晚在忙啥?”说实话,这个问题我刚入行的时候也想问。当时以为驱动工程师就是对着芯片手册敲寄存器,后来真干了几年才发现,写代码只是很小一部分,更多时间花在查…

2026/9/30 22:55:55 阅读更多 →
芯片按功能分类详解:从MCU、电源到AI加速器的选型地图

芯片按功能分类详解:从MCU、电源到AI加速器的选型地图

有没有在拆开某个电子产品之后,对着主板上密密麻麻的芯片发过呆?外形都是黑乎乎的小方块,引脚从几个到上千个不等,丝印型号更是五花八门。其实,一旦你掌握了“芯片按功能分类”这条主线,再乱的板子也能被拆…

2026/9/30 22:55:55 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/30 15:27:04 阅读更多 →