一文读懂SpringMVC的工作原理
前言
MVC是经典的软件架构设计模式,几乎在各个领域各种开发语言中,均采纳了这个思想。此刻博主突然想到了Thinking in xxx系列设计书籍。换句话说,就是“各人自扫门前雪”和“术业有专攻”。当职责分配得当后,剩下的就是发挥各“人”之所长了。
而SpringMVC继承了这一优良传统,沿袭了其中的核心思想。所以今天博主就来谈谈它是如何做到的,为什么可以引领风骚十几年。

Q:SpringMVC是如何工作的
Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。
其中,处理器是你的应用中注解了@Controller和@RequestMapping的类和方法,Spring为处理器方法提供了极其多样灵活的配置。Spring 3.0以后提供了@Controller注解机制、@PathVariable注解以及一些其他的特性,你可以使用它们来进行RESTful web站点和应用的开发。
“对扩展开放”是Spring MVC框架一个重要的设计原则,而对于Spring的整个完整框架来说,其设计原则是“对扩展开放,对修改闭合”。这也是经典的开闭原则的实践之一。
1. SpringMVC交互图

Spring MVC框架,与其他很多web的MVC框架一样:请求驱动。
所有设计都围绕着一个中央Servlet来展开,它负责把所有请求分发到控制器,同时提供其他web应用开发所需要的功能。
2. DispatcherServlet(前端控制器)工作流
下图展示了SpringMVC的DispatcherServlet处理请求的工作流,按序查看:

2.1 发送请求Request
DispatcherServlet是springMVC的重要部分,位于中心。提供整个框架访问点,起到交换的作用,而且与Spring IoC容器集成。在实际开发中,只需要在web.xml中进行配置,其他组件由框架提供,配置示例如下:

2.2 处理映射HandlerMapping
HandlerMapping负责根据用户请求request找到Handler(即处理器)。SpringMVC提供了实现了不同映射方式的多种映射器,例如:配置文件方式,实现接口方式,注解方式等。以下是在spring.xml中,使用自动扫描的形式:

2.3 处理适配HandlerAdapter
我们的controller类必须继承Controller(base class)或者添加注解@Controller,前端控制器才会根据controller类对应的类型调用相应的HandlerAdapter,处理客户端的request。
2.4 定义控制类controller
该controller返回一个ModelAndView:

2.5 视图解析View resolver
View Resolver负责将处理结果生成View视图。其过程大致是先根据逻辑视图名解析成物理视图名(即具体的页面URL),再生成View视图对象,最后对View进行渲染,将处理结果通过页面展示给用户。大致配置如下:

2.6 视图View
编写JSP、excel、pdf等可向客户呈现的内容或页面,展示数据。
结语
博主通过一文对SpringMVC架构尝试解读,按运行时序解剖SpringMVC的每个关键步骤是“做什么的”和“如何做的”。相信你能够从中get到它的核心运行逻辑,并基于此搭建可靠的开发框架。

相关文章:
一文读懂SpringMVC的工作原理
前言 MVC是经典的软件架构设计模式,几乎在各个领域各种开发语言中,均采纳了这个思想。此刻博主突然想到了Thinking in xxx系列设计书籍。换句话说,就是“各人自扫门前雪”和“术业有专攻”。当职责分配得当后,剩下的就是发挥各“…...
【python-斐波那契数列和完美数之间的区别】
斐波那契数列和完美数在数学领域中是两个截然不同的概念,它们之间存在明显的区别。以下是对这两个概念及其区别的详细阐述: 斐波那契数列 定义: 斐波那契数列,又称黄金分割数列,是一个在数学上具有重要意义的数列。它…...
【redis】本地windows五分钟快速安装redis
用处:本地自测,有时候公司redis环境不稳定,用自己的 1.下载,github下载一个解压缩在自己想要的位置 选择版本:Redis-7.4.0-Windows-x64-msys2-with-Service,zip GitHub - redis-windows/redis-windows: …...
arm64高速缓存基础知识
高速缓存的替换策略 随机法:随机地确定替换的高速缓存行,由一个随机数产生器产生随机数来确认替换行 FIFO法:选择最先调入的高速缓存行进行替换 LRU法:最少使用的行优先替换。 高速缓存的共享属性 内部共享的高速缓存通常指的…...
物管王 物业管理系统软件
物管王 物业收费管理系统软件 网络版...
YOLOv10改进:CA注意力机制【注意力系列篇】(附详细的修改步骤,以及代码,目标检测效果优于SE和CBAM注意力)
YOLOv10改进:CA注意力机制【注意力系列篇】(附详细的修改步骤,以及代码) 如果实验环境尚未搭建成功,可以参考这篇文章 ->【YOLOv10超详细环境搭建以及模型训练(GPU版本)】 文章链接为&…...
使用go语言获取海南七星彩历史开奖记录并打印输出
效果如下 : 1.引用json与http模块 import ("encoding/json""fmt""github.com/nahid/gohttp" ) 2.创建请求: req := gohttp.NewRequest()resp, err := req.Get("这里填写请求地址")if err != nil {panic(err)} 3.处理响应结果 : if…...
使用Spring Boot集成Spring Data JPA和单例模式构建库存管理系统
引言 在企业级应用开发中,数据库操作是非常重要的一环。Spring Data JPA提供了一种简化的方式来进行数据库交互,它使得开发者无需编写复杂的JPA代码就可以完成常见的CRUD操作。此外,设计模式如单例模式可以帮助我们更好地管理和控制对象的创…...
记录ssl epoll的tcp socket服务端在客户端断开时崩溃的问题
文章目录 当客户端关闭后,Epoll 的 TCP socket 服务端会收到两次断开事件可能有以下原因及解决方法:原因分析解决方法 问题ssl socket服务端代码出错现象第一次尝试修改正确改法附上客户端代码 记录ssl epoll的tcp socket服务端在客户端断开时接收到多次…...
ubuntu任何版本 卡死 解决办法
首先,我们一定要记得ubuntu一定不要强制关机,一定,一定 因为90% 的可能你的电脑从此就会黑屏开不了机了,然后你就可以按照我的方法去卸载,重装ubuntu系统了。/(ㄒoㄒ)/~~ (如果能解决您的问题,…...
算法-合并区间(56)
这道题可以用列表来写,首先对所有的数组区间依据第一个数字进行排序,然后创建一个数组列表存放合并重叠后的结果。 如果列表为空,或者当前区间的起始位置大于列表中区间的最后一个位置,则不重叠直接插入列表,否则合并…...
港科夜闻 | 叶玉如校长出席2024科技+新质生产力高峰论坛发表专题演讲,贡献国家科技强国战略...
关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、叶玉如校长出席“2024科技新质生产力高峰论坛”,做了题为“三个创新:培育和发展新质生产力、贡献国家科技强国战略”的主题演讲。该论坛于9月2日在香港召开。论坛围绕夯实基础科研、推动源头创新、…...
一文读懂IPv6v6地址的配置方式
在数字化浪潮的推动下,互联网正以前所未有的速度发展,而IPv6作为新一代网络协议,以其庞大的地址空间、增强的安全性和灵活的地址配置机制,成为了支撑这一发展的关键技术。本文将深入解析这两种配置方式的工作原理、应用场景及操作…...
【设计模式】设计模式的八大原则
设计模式的八个原则: 依赖倒置原则: 高层次的代码(稳定)不应该依赖低层次的代码(变化)抽象的代码不应该依赖具体的代码。 开放封闭原则:类模块应该开放扩展的,而其原先的代码尽量封…...
【Github项目推荐】DataLoom
项目推荐 - DataLoom 项目背景 在数据驱动的时代,越来越多的企业和个人用户需要从复杂的数据中提取出高价值的信息。然而,传统的数据处理和分析流程复杂且耗时,需要技术人员的深度参与。那么,有没有一种工具能够简化这一过程&am…...
重磅!布拉德皮特移居法国?据称与他和安吉丽娜朱莉生养的6个孩子有关!皮特一直为自己与孩子们如此亲近却又如此遥远而苦恼
对于那些不知道的人来说,布拉德皮特似乎已经正式离开洛杉矶前往欧洲。虽然这有很多原因,我们将逐一介绍,但主要原因据称与他和前前妻安吉丽娜朱莉所生养的六个疏远的孩子有关。 知情人士告诉《InTouch Weekly》,皮特搬到了法国&a…...
.net MAUI应用生命周期
.NET Multi-platform App UI (.NET MAUI) 应用通常有四种执行状态:“未运行”、“运行中”、“已停用”和“已停止”。 当应用从未运行状态转换为运行状态、从运行状态转换为已停用状态、从已停用状态转换为已停止状态、从已停止状态转换为运行状态,以及…...
Nginx 安装教程
一、安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c libtool openssl openssl-devel 二、首先要安装 PCRE PCRE 作用是让 Nginx 支持 Rewrite 功能。 1、下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/p…...
vue axios发送post请求跨域解决
跨越解决有两种方案,后端解决,前端解决。后端解决参考Django跨域解决-CSDN博客 该方法之前试着可以的,但是复制到其他电脑上报错,所以改用前端解决 1、main.js做增加如下配置 import axios from axios Vue.prototype.$axios a…...
MIT线性代数
本文链接的原创作者为 浊酒南街https://blog.csdn.net/weixin_43597208 第1讲 MIT_线性代数笔记:第 01 讲 行图像和列图像-CSDN博客 第2讲 MIT_线性代数笔记:第 02 讲 矩阵消元_矩阵first pivot-CSDN博客 第3讲 MIT_线性代数笔记:第 03…...
SPT-AKI Profile Editor:终极《逃离塔科夫》离线存档编辑器完全指南
SPT-AKI Profile Editor:终极《逃离塔科夫》离线存档编辑器完全指南 【免费下载链接】SPT-AKI-Profile-Editor Программа для редактирования профиля игрока на сервере SPT-AKI 项目地址: https://gitcode.com…...
英雄联盟终极自动化工具:5分钟快速上手League Akari完整指南
英雄联盟终极自动化工具:5分钟快速上手League Akari完整指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在为繁琐的游戏操作…...
Midscene.js 实战(一):零代码基础,用自然语言完成 Web UI 测试
一、开篇:UI 自动化测试,真的不需要会写代码吗? 如果你做过 UI 自动化测试,下面这些场景一定感同身受: 页面改版了,之前精心编写的 XPath 选择器全部失效,脚本大修; 新来的测试同事不懂 CSS 选择器,写不了自动化脚本,培训成本居高不下; 产品经理提了个自动化需求,…...
次梯度优化与最优传输:实现公平系统辨识的算法框架
1. 项目概述与核心问题系统辨识,简单来说,就是“教会”计算机理解一个物理或抽象系统的运作规律。比如,我们有一台复杂的工业反应釜,输入是原料的流速和温度,输出是最终产品的浓度。系统辨识的目标,就是通过…...
Sketch MeaXure:5分钟掌握设计标注终极解决方案
Sketch MeaXure:5分钟掌握设计标注终极解决方案 【免费下载链接】sketch-meaxure 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-meaxure 你是否还在为设计稿标注而烦恼?Sketch MeaXure正是为你量身打造的现代化设计标注神器!…...
Warcraft Helper终极指南:5分钟让你的魔兽争霸3在现代系统流畅运行
Warcraft Helper终极指南:5分钟让你的魔兽争霸3在现代系统流畅运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在Wind…...
量子机器学习在网络安全中的实践评估:从数据加载瓶颈到系统化分析框架
1. 量子机器学习在网络安全中的应用:从理论加速到现实瓶颈量子机器学习(QML)这几年在学术界和工业界都挺火的,尤其是在网络安全这种数据量大、计算复杂度高的领域。大家总说量子计算能带来指数级加速,听起来像是解决一…...
CapyMOA:Python流式机器学习框架,高效应对概念漂移与在线持续学习
1. 项目概述:为什么我们需要CapyMOA?在现实世界的机器学习应用中,数据很少是静止不动的。想象一下,你正在构建一个金融欺诈检测系统,攻击者的策略会随时间不断演变;或者是一个工业物联网传感器监控平台&…...
Linux 用户与用户组核心概念详解(零基础必懂)
前言Linux 是典型的多用户、多任务操作系统,支持多人同时登录、各司其职、权限隔离。所有文件、进程、权限都依托用户与用户组实现管控,是Linux权限体系的基石。彻底弄懂用户、用户组概念,是掌握服务器权限管控、账号运维的前提,本…...
从GEDI L4A数据到论文图表:如何用Python和geemap进行AGBD时空分析与可视化
从GEDI L4A数据到论文图表:Python与geemap实现AGBD科研级分析全流程当我们需要量化森林碳储量或评估生态恢复成效时,地上生物量密度(AGBD)是最关键的指标之一。NASA的GEDI卫星通过激光雷达技术,以25米分辨率捕捉全球植…...
