【Spring】SpringMVC请求原理

news2025/3/13 18:36:27

什么是SpringMVC:

        SpringMVC 是Springframework中基于Java实现的Model-View-Controller框架,用于管理web应用程序的请求处理流程,并遵循MVC设计原则。

什么是MVC:

        MVC是Model-View-Controller的缩写,是一种设计原则,广泛应用在web应用开发中。

        Controller-控制器:接受http请求,解析、映射并转发给对应的model处理;中转站,获取model的返回结果返回给view;在SpringMVC中,@Controller注解标注的类起到controller的作用。

        Model-模型:封装业务逻辑和数据,包括调用dao层,在JavaEE环境中,模型通常由Java bean或实体类组成,并通过dao层或Service层与数据库交互。

        View-视图:是用户界面,负责展示和接受数据;将Model中的数据展示在View上;在web应用中可以是Thymeleaf页面,或jsp页面,HTML页面等。

        

SpringMVC工作流程:

        借来一张图:

博客:【SpringMVC】SpringMVC原理和工作流程_springmvc原理及流程-CSDN博客

1、前端控制器(DispatcherServlet)-接受、分发请求,协助
        所有的HTTP请求首先由Spring MVC的核心组件DispatcherServlet接收。
        DispatcherServlet是整个MVC架构的入口点,它负责接收、分发请求,并协调其他组件来完成请求处理。
2、处理器映射器(HandlerMapping)-找到URL对应的controller
        DispatcherServlet查询已注册的HandlerMapping组件,这些组件用于根据请求的URL找到对应的处理器(Controller)。HandlerMapping会将请求映射到相应的Controller及其处理方法上。在controller中使用@RequestMapping注解标识路径。
3、Controller处理请求:
        当找到合适的Controller后,DispatcherServlet会调用该Controller中的相应方法进行业务逻辑处理。
        Controller可以访问服务层(Service Layer)处理业务逻辑,并从数据访问层(DAO Layer)获取或更新数据模型(Model)。
4、ModelAndView创建:
        处理完业务逻辑后,Controller通常会返回一个ModelAndView对象,其中包含了视图名称以及需要展示的数据模型。
5、视图解析器(ViewResolver):
        DispatcherServlet接下来会将ModelAndView对象传递给ViewResolver,用于解析实际的视图技术(如JSP、Thymeleaf、FreeMarker等)及视图路径。
        ViewResolver基于返回的视图名称选择并实例化一个具体的视图对象。

        就是说DispatcherServlet不是亲自去解析视图,而是交给ViewResolver类。
6、视图渲染与响应:
        最后,选中的视图对象会使用Controller提供的模型数据进行渲染,并生成最终的HTML页面或者其他类型的响应内容。
        渲染完成后,DispatcherServlet将这个响应内容发送回客户端。

        第1、2步相当于MVC中的C;3、4步相当于M;5、6步相当于V;

关于dispatcherServlet:

        从上面的流程中,我们发现dispatcherServlet在springMVC 中启动非常重要的作用,接收、分发请求,中转,视图解析,将结果返回给客户端。提到dispatcherServlet,我们自然会想到Servlet。

        Servlet为Web服务器提供了扩展HTTP协议请求和响应处理的能力。Servlet是一个实现了javax.servlet.Servlet接口或继承自javax.servlet.http.HttpServlet类的Java类,它可以接收并响应客户端发送的HTTP请求,执行相应的业务逻辑,并将结果以HTTP响应的形式返回给客户端。

        dispatcherServlet我认为可以理解为是Servlet的一个变体,不仅具有Servlet的功能,还提供了分发请求,视图解析以及SpringMVC框架集成的能力。

        

        以上就是我对SpringMVC原理和流程的梳理。经过本次梳理,再结合项目实战,对SpringMVC,DispatcherServlet,Servlet技术,MVC模型有了更加深刻理解。

        无限感慨前人架构设计之伟大,无限感恩前人对软件设计做出的贡献,太厉害了。


其他:

1、关于SSH(Struts2-Spring-Hibernate)和SSM(SpringMVC-Spring-Mybatis)中Struts和SpringMVC的对比:

        Struts是一个单独且非常著名的Java Web框架,主要用于处理MVC(Model-View-Controller)设计模式中的控制层。

        Struts的主要作用是在Web应用开发中提供一种结构化的、可扩展的方式来组织和管理业务逻辑以及页面展示。它通过ActionServlet作为前端控制器接收HTTP请求,并根据配置文件(如struts-config.xml)将请求映射到相应的Action类进行处理。Struts提供了丰富的标签库来简化JSP页面的开发,同时具备异常处理、数据校验、国际化等功能。

        而在SSM框架体系中,SpringMVC替代了Struts的角色,承担起处理HTTP请求、转发到Service层进行业务逻辑处理、并返回视图渲染的任务。虽然Struts曾经非常流行,但在现代Web开发中,由于Spring MVC以及其他轻量级框架的兴起,Struts的使用已相对减少。

2、SpringBoot中对SpringMVC的应用:

        在Spring Boot中,虽然没有明确地配置和使用Spring MVC的XML配置文件,但Spring Boot默认集成了Spring Web MVC框架,因此处理HTTP请求时仍然是基于Spring MVC的机制。当你在Spring Boot应用中创建一个Controller来接收和处理HTTP请求时,实际上就是在利用Spring MVC的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1519193.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PS学习 - 抠图-通道-主题颜色和背景颜色不能相近

抠出蝴蝶 1.通道抠图 套索工具 这里需要圈住你要的,注意尽量小点 ctrl j 复制 然后去掉背景 点击通道 找到明暗对比最大的通道,这里我理解为颜色反差最大的那个,突出你要抠的东西 搜了下说是一般为蓝色 复制通道 ctrll调出色阶 通过移…

MySQL--执行一条 select 语句,期间发生了什么?

执行一条 SQL 查询语句,期间发生了什么? 连接器:建立连接,管理连接、校验用户身份;查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。MySQL 8.0 已删除该模块;解析 …

java-类和对象

1.面向对象 1.1 区分面向对象与面向过程 举个例子: 在传统的洗衣服过程中,需要经历防水,放衣服,放洗衣粉,搓洗,换水......多个步骤,每个过程都是不可或缺的,关注的是过程. 而现在的洗衣服过程,就需要我们把衣服,洗衣粉放入洗衣机,启动洗衣机即可,并不需要关注洗衣机是如何运行…

长期护理保险可改善老年人心理健康 | CHARLS CLHLS CFPS 公共数据库周报(3.6)...

欢迎报名2024年“真实世界临床研究”课程! 本周郑老师开讲:“真实世界临床研究”培训班,3月16-17日两天,欢迎报名! CHARLS公共数据库‍ CHARLS数据库简介中国健康与养老追踪调查(China Health and Retirement Longitud…

Upload-labs 靶场通关攻略(全网最全最完整)

一、环境 在github上找upload-labs-0.1环境,部署在小皮面板上 upload靶机包 也可以直接下载他的集成的环境 二、闯关 1、Pass-01(前端验证) 文件上传漏洞就是利用我们上传的后门文件可以服务器进行解析 首先我们要写一个一句话木马文件…

AI大模型额外学习一:斯坦福AI西部世界小镇笔记

文章目录 一、简单介绍1)项目代码介绍2)重新播放模拟3)适当修改分叉模拟 二、部署斯坦福小镇Demo1)准备工作2)解决遇到的bug3)启动服务器和前端 github链接 一、简单介绍 ①背景介绍 This repository acc…

声明式事务还是编程式事务,如何选择?

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ 👀👀👀 个人博客:小奥的博客 👍👍👍:个人CSDN ⭐️⭐️⭐️:Github传送门 🍹 本人24应届生一枚,技术和水平有…

[善用佳软]推荐掌握小工具:Json解析的命令行工具jq

前言: 我们在各种生产环境或者开发测试环境中,一定遇到有很多信息都是使用JSON串或者文本文件作为输入的。在没有JQ命令行工具之前,我们要从中获取真正的输入,大都把它复制到文本里头,然后使用文本编辑器进行加工整理…

WSL2执行nvidia-smi报错:Command ‘nvidia-smi‘ not found, but can be installed with

报错信息: Command nvidia-smi not found, but can be installed with: sudo apt install nvidia-utils-390 # version 390.157-0ubuntu0.22.04.2, or sudo apt install nvidia-utils-418-server # version 418.226.00-0ubuntu5~0.22.04.1 sudo apt insta…

LeetCode 热题 100 | 回溯(二)

目录 1 39. 组合总和 2 22. 括号生成 3 79. 单词搜索 菜鸟做题,语言是 C,感冒快好版 关于对回溯算法的理解请参照我的上一篇博客; 在之后的博客中,我将只分析回溯算法中的 for 循环。 1 39. 组合总和 题眼:c…

程序员的知识宝库,100+开源书籍、文档

公众号:【可乐前端】,每天3分钟学习一个优秀的开源项目,分享web面试与实战知识,也有全栈交流学习摸鱼群,期待您的关注! 每天3分钟开源 hi,这里是每天3分钟开源,很高兴又跟大家见面了&#xff0…

代码随想录刷题笔记 Day 52 | 打家劫舍 No.198 | 打家劫舍 II No.213 | 打家劫舍III No.337

文章目录 Day 5201. 打家劫舍&#xff08;No. 198&#xff09;<1> 题目<2> 笔记<3> 代码 02. 打家劫舍 II&#xff08;No. 213&#xff09;<1> 题目<2> 笔记<3> 代码 03.打家劫舍III&#xff08;No. 337&#xff09;<1> 题目<2&g…

RocketMQ学习笔记三(黑马)大神级

课程来源:6.RocketMQ安装_哔哩哔哩_bilibili (时长:19.5h) 讲解版本:4.5版本(我是以4.8版本实践的) 目录 第一部分 核心功能 第1章 RocketMQ的下载、安装、启动和测试(Linux环境) 启动: 测试: 第2章 RocketMQ集群搭建 2.1 集群特点 2.2 集群模式 2.3 双主…

HTML_CSS练习:HTML注释

一、代码示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>HTML注释</title> </head> <body><marquee loop"1">马龙强<!--下面的输入框是可以滚动的&#x…

新手必看!YouTube运营教程:你需要的策略、工具和技巧

欢迎来到 YouTube 的世界&#xff01;对于跨境电商和海外社媒营销人员来说&#xff0c;YouTube 是一个充满机遇的宝地。无论你是希望通过视频内容扩大品牌影响力&#xff0c;还是想要抓住全球买家的注意力&#xff0c;掌握YouTube运营的基础是你成功的第一步。本篇教程将为你揭…

云与云计算:从传统到云端的IT资源变革

云&#xff1a;从分散到集约&#xff0c;资源服务化的新模式 让我们先通过一个生活化的场景来理解“云”这一概念。几十年前&#xff0c;诸如农村地区的居民需要自给自足&#xff0c;比如在自家院子里打井取水&#xff0c;冬季烧煤取暖&#xff0c;一切满足自己生活需要的都要…

健康消费需求持续上涨,品牌如何抓住机遇

近年来&#xff0c;国内“大健康”时代徐徐展开&#xff0c;居民消费热度不断攀升&#xff0c;主动健康消费已经成为新的增长点&#xff0c;然而健康行业的内容由于专业性较高&#xff0c;传播范围有限导致无法直接触达用户。在当下的传播环境中&#xff0c;品牌应该如何抓住机…

百万级excel导入导出

项目目录结构&#xff1a; * 导入思路&#xff1a; excel拆分为多个sheet&#xff0c;开启20个线程分别处理20个sheet&#xff0c;采用批量插入的方式入库 * 导出思路&#xff1a; 开启20个线程分页读取数据&#xff0c;放入到map中&#xff0c;CountDownLatch保证并发安全…

C++(14)——vector

目录 vector是什么&#xff1f; vector的使用 vector的构造 vector iterator的使用 vector空间增长问题 vector的增删查改 push_back和pop_back operator[] 总结 vector是什么&#xff1f; vector是什么呢&#xff1f;按照英文来说&#xff0c;vector的英文是向量、矢…

Lord 3DMCV7-AHRS 时间同步硬件触发设置

目的:通过FPGA发送脉冲触发IMU采集数据。FPGA发送脉冲时,IMU才有数据产生。 FPGA与IMU的硬件接线就不讲了,这里主要说明的是IMU的设置以及ROS驱动的config文件更改。 1. WIN上位机设置 通过IMU在WINDOWS的上位机SensorConnect对IMU的GPIO、波特率等基本功能进行设值,具体…