谈谈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/7/21 20:39:40 阅读更多 →
HarmonyOS应用开发实战:小事记 - 文本显示与排版:Text/TextInput/TextArea 的富文本与溢出处理

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

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

2026/7/25 5:35:29 阅读更多 →
TVBOX家庭影院智能升级与性能优化全攻略

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

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

2026/7/25 5:03:19 阅读更多 →

最新新闻

终极GTNH汉化完全指南:轻松解锁中文科技魔法世界

终极GTNH汉化完全指南:轻松解锁中文科技魔法世界

终极GTNH汉化完全指南:轻松解锁中文科技魔法世界 【免费下载链接】Translation-of-GTNH GTNH整合包的汉化 项目地址: https://gitcode.com/gh_mirrors/tr/Translation-of-GTNH GTNH汉化项目是专门为GregTech: New Horizons(格雷科技:新…

2026/7/26 1:43:14 阅读更多 →
抖音下载终极指南:免费开源工具轻松保存视频、直播与音乐

抖音下载终极指南:免费开源工具轻松保存视频、直播与音乐

抖音下载终极指南:免费开源工具轻松保存视频、直播与音乐 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…

2026/7/26 1:43:14 阅读更多 →
终极指南:如何用OBS虚拟背景插件实现专业级AI背景移除

终极指南:如何用OBS虚拟背景插件实现专业级AI背景移除

终极指南:如何用OBS虚拟背景插件实现专业级AI背景移除 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https://…

2026/7/26 1:43:14 阅读更多 →
如何快速掌握GitHub加速:新手必备的完整高效指南

如何快速掌握GitHub加速:新手必备的完整高效指南

如何快速掌握GitHub加速:新手必备的完整高效指南 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 你是否曾经因为GitHub…

2026/7/26 1:43:14 阅读更多 →
高效配置指南:3个步骤让你的Windows 11系统更流畅

高效配置指南:3个步骤让你的Windows 11系统更流畅

高效配置指南:3个步骤让你的Windows 11系统更流畅 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and custom…

2026/7/26 1:43:14 阅读更多 →
UG运动仿真在发动机进气排气系统动态干涉分析中的应用

UG运动仿真在发动机进气排气系统动态干涉分析中的应用

那天下午,我正对着屏幕上一套复杂的发动机三维模型发愁。客户要求验证进气排气系统的运动干涉,这不是简单的静态装配检查,而是要模拟凸轮轴驱动下气门的真实开闭时序。如果沿用老方法——手动旋转部件、逐帧检查——不仅效率低下,…

2026/7/26 1:42:14 阅读更多 →

日新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

月新闻