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

【SpringMVC】深入解析@ RequestMapping 注解的概念及使用和 MVC 介绍

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


Spring Web MVC入门


1. Spring Web MVC


什么是 Spring Web MVC?

MVC官方文档介绍

Spring Web MVC是Spring框架中的一个用来做网站开发的部分,它是基于Servlet技术的。

虽然它的正式名字叫“Spring Web MVC”,但大家一般都简称它“SpringMVC”。

什么是 Servlet ?

Servlet是一种技术,用来创建动态网页。

它其实是一种规范,也就是规定了如何写Java Web应用的规则。但单靠规范本身不能做任何事,必须要开发者根据这些规则写代码,才能实现它的功能。

很多公司都可以根据这个规范来开发相应的软件,比如Tomcat、Weblogic、Jetty等,它们被叫做“Servlet容器”。

这些容器的作用就是管理和运行开发者写的Servlet代码。

从上述定义我们可以得出一个信息:Spring Web MVC是一个Web框架。 下面咱们简称之为:Spring MVC

然而要真正的理解什么是Spring MVC?我们首先要搞清楚什么是MVC?


1.1 MVC 定义


MVC是Model View Controller的缩写,它是软件工程中的一种软件架构设计模式,它把软件系统分为模型视图控制器三个基本部分。

在这里插入图片描述

  • Model:数据的管理者,负责存取和处理数据,如数据库操作。
  • View:数据的展示者,用户看到的界面,如网页或APP界面。
  • Controller:协调者,接收用户请求,选择对应的Model处理,并返回结果到View。
  • Model:是看不见的数据管家 (数据库操作/计算逻辑),后厨
  • View:是看得见的界面(你操作的按钮/表格),点餐菜单
  • Controller: 是传话小秘书 (在界面和数据之间跑腿传话),传菜单的服务员

1.2 什么是Spring MVC?


MVC是一种架构设计模式,也是一种思想,而Spring MVC是对MVC思想的具体实现。除此之外,Spring MVC还是一个Web框架。

总结来说,Spring MVC是一个实现了MVC模式的Web框架。所以,Spring MVC主要关注有两个点:

  1. MVC
  2. Web框架

Spring MVC 全称是 Spring Web MVC。

在这里插入图片描述

其实,Spring MVC我们在前面已经用过了,在创建Spring Boot项目时,我们勾选的Spring Web框架其实就是Spring MVC框架:

可以看到,Spring Web的介绍是:

Build web, including RESTful, applications using Spring MVC. Uses Apache Tomcat as the default embedded container.

这时候可能有些 uu 就懵了,前面创建的不是SpringBoot项目吗?怎么又变成了Spring MVC项目?他们之间到底有着什么样的关系?

  • SpringBoot是2014年发布的,Spring是2004年发布的,在2014年发布之前,就不能用Spring实现MVC架构吗?显然不是了。
  • Spring Boot只是实现Spring MVC的其中一种方式而已。
  • Spring Boot可以添加很多依赖,借助这些依赖实现不同的功能。Spring Boot通过添加Spring Web MVC框架,来实现web功能。

不过Spring在实现MVC时,也结合自身项目的特点,做了一些改变,相对而言,下面这个图或许更加合适一些……

在这里插入图片描述


在这里插入图片描述

现在请求不再先走view再走controller,请求可以直接发送到controller

controller在受到model传回来的响应后,可以返回给 view,也可以直接返回浏览器

后端开发一般就不会让请求和响应交互过程走view,不过核心没变 ,比如上面的例子中,去饭店吃饭:

  • 一些饭店是前厅来负责接待客户,帮助客户点餐,也就是 Controller 来负责接收用户的请求。
  • 去公司面试,直接由面试官来接待候选人,省去了HR中间的交接过程。

2. 学习Spring MVC


既然是Web框架,那么当用户在浏览器中输入了url之后,我们的Spring MVC项目就可以感知到用户的请求,并给予响应。

咱们学习Spring MVC,重点也就是学习如何通过浏览器用户程序进行交互。主要分以下三个方面:

  1. 建立连接:让用户(浏览器)能找到并访问你的 Spring 程序,简单来说就是让用户输入网址时能够打开你的网页。

  2. 请求:用户在网页上点击、输入等操作时,会发送一些信息(比如表单数据)。你的程序需要能接收到这些信息,以便做进一步处理。

  3. 响应:当程序处理完用户的请求后,需要把处理结果(比如网页内容)返回给用户,这就是响应。

总结一下:就是让用户通过浏览器访问程序,获取信息,再把结果返回给用户。

对于Spring MVC来说,掌握了以上3个功能就相当于掌握了Spring MVC。


2.1 项目准备


Spring MVC项目创建和Spring Boot创建项目相同,在创建的时候选择Spring Web就相当于创建了Spring MVC的项目。

Spring MVC使用Spring Boot的方式创建

创建项目时,勾选上Spring Web模块即可,如下图所示:

在这里插入图片描述


2.2 建立连接


在Spring MVC中使用 @RequestMapping 来实现URL路由映射,也就是浏览器连接程序的作用

我们先来看看代码怎么写,创建一个 UserController 类,实现用户通过浏览器和程序的交互,具体实现代码如下:

在这里插入图片描述

资源路径:类路径+方法路径(资源路径要唯一),建议给所有的类都加上类路径,可以:

  • 使用唯一命名类路径,避免报错;
  • 提高可读性;

方法名和路径名称无需一致

接下来,我们运行程序,访问:http://127.0.0.1:8080/sayHi,就可以看到程序返回的数据了:

在这里插入图片描述


加上类路径也可以:

在这里插入图片描述


2.2.1 @ RequestMapping 注解介绍

@RequestMapping 是Spring Web MVC应用程序中最常被用到的注解之一,它是用来注册接口的路由映射的。

表示服务收到请求时,路径为 /sayHi 的请求就会调用 sayHi 这个方法的代码。

路由映射:当用户访问一个URL时,将用户的请求对应到程序中某个类的某个方法的过程就叫路由映射。

既然@RequestMapping已经可以达到我们的目的了,我们为什么还要加@RestController呢?

我们把@RestController去掉,再来访问一次:

在这里插入图片描述

可以看到,程序报了404,找不到该页面。

这就是@RestController起到的作用。

一个项目中,会有很多类,每个类可能有很多的方法,Spring程序怎么知道要执行哪个方法呢?

Spring会对所有的类进行扫描,如果类加了注解@RestController,Spring 才会去看这个类里面的方法有没有加@RequestMapping这个注解,当然它的作用不止这一点。


2.2.2 @ RequestMapping使用

@RequestMapping既可修饰类,也可以修饰方法,当修饰类和方法时,访问的地址是资源路径,资源路径=类路径+方法路径

@RequestMapping标识一个:设置映射请求的请求路径的初始信息
@RequestMapping标识一个方法:设置映射请求请求路径的具体信息

在这里插入图片描述

访问地址:http://127.0.0.1:8080/user/sayHi

在这里插入图片描述


注意:

@RequestMapping的URL路径最前面加不加/(斜杠)都可以,Spring程序启动时,会进行判断,如果前面没有加,Spring会拼接上一个/

在这里插入图片描述

访问 http://127.0.0.1:8080/user/sayHi,依然可以正确响应。

在这里插入图片描述

通常情况下,我们加上/

@RequestMapping的URL路径也可以是多层路径,最终访问时,依然是类路径+方法路径
在这里插入图片描述

访问路径:http://127.0.0.1:8080/user/m1/say/hi

在这里插入图片描述


2.2.3 @ RequestMapping是GET还是POST请求?

GET请求

浏览器发送的请求类型都是GET,通过以上案例,可以看出来 @RequestMapping 支持GET请求。


POST请求

我们通过 form 表单来构造请求:

创建test.html,HTML代码:

在这里插入图片描述


前端代码放在static目录下,访问方式为:http://127.0.0.1:8080/test.html

在这里插入图片描述


如果有多层目录,访问链接从static目录开始写。

在这里插入图片描述

如上图,访问链接为:http://127.0.0.1:8080/html/test.html。

在这里插入图片描述

从运行结果可以看出:@RequestMapping既支持GET请求,又支持POST请求。同理,也支持其他的请求方式。

那如何指定GET或者POST类型呢?

指定GET/POST方法类型

我们可以显式地指定 @RequestMapping 来接收POST的情况,如下所示:

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

相关文章:

【SpringMVC】深入解析@ RequestMapping 注解的概念及使用和 MVC 介绍

Spring Web MVC入门 1. Spring Web MVC 什么是 Spring Web MVC? MVC官方文档介绍 Spring Web MVC是Spring框架中的一个用来做网站开发的部分,它是基于Servlet技术的。 虽然它的正式名字叫“Spring Web MVC”,但大家一般都简称它“SpringMVC”…...

YOLOv8 自定义目标检测

一、引言 YOLOv8 不仅支持预训练模型的推理,还允许用户将其应用于自定义对象检测。本文将详细介绍如何使用 YOLOv8 训练一个新的模型,并在自定义数据集上进行对象检测。 二、数据集准备 1. 数据集格式 YOLOv8 支持多种数据集格式,包括 CO…...

抓包分析工具介绍

什么是抓包分析工具? 抓包分析工具,也称为网络数据包嗅探器或协议分析器,用于捕获和检查网络上传输的数据包。这些数据包包含了网络通信的详细信息,例如请求的资源、服务器的响应、HTTP 头信息、传输的数据内容等等。通过分析这些…...

计算机毕业设计SpringBoot+Vue.js爱心捐赠项目推荐系统 慈善大数据(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

Python----数据分析(Matplotlib四:Figure的用法,创建Figure对象,常用的Figure对象的方法)

一、Figure的用法 在 Matplotlib 中, Figure对象是整个绘图的顶级容器,它是所有绘图元素的基础, 提供了一个用于绘制图形的画布空间。 在 Matplotlib 中, Axes对象是进行数据绘制和设置坐标轴等操作的核心区域,它与 Fi…...

CameraX学习2-关于录像、慢动作录像

CameraX实现录像 首先在起预览时就要配置录像usecase,对于cameraX来说就是绑定录像usecase到lifecycle。如下。 1,创建Recorder对象,是与 VideoCapture 紧密耦合的 VideoOutput 实现。Recorder可以用来配置录像的分辨率、比例等,还…...

Java链接redis

一、准备工作就像谈恋爱 首先咱们得来点仪式感是不是&#xff1f;打开你的Maven&#xff08;Gradle玩家别打我&#xff09;&#xff0c;把这两个宝贝依赖给我焊死在pom.xml里&#xff1a; <!-- 经典永不过时的Jedis --> <dependency> <groupId>redis.cli…...

2025最新群智能优化算法:基于RRT的优化器(RRT-based Optimizer,RRTO)求解23个经典函数测试集,MATLAB

一、基于RRT的优化器 基于RRT的优化器&#xff08;RRT-based Optimizer&#xff0c;RRTO&#xff09;是2025年提出的一种新型元启发式算法。其受常用于机器人路径规划的快速探索随机树&#xff08;RRT&#xff09;算法的搜索机制启发&#xff0c;首次将RRT算法的概念与元启发式…...

VBA 数据库同一表的当前行与其他行的主键重复判断实现方案

目的&#xff0c;判断是否主键重复&#xff0c;不重复则登录新数据&#xff0c;重复则不登录。 定义类型&#xff1a; DataRecord   tableName 表名   rowNumber 行号   columnName 列名   data 数据 想要实现的代码逻辑如下&#xff1a; 模拟数据库的登录过程。假设…...

DeepSeek开启AI办公新模式,WPS/Office集成DeepSeek-R1本地大模型!

从央视到地方媒体&#xff0c;已有多家媒体机构推出AI主播&#xff0c;最近杭州文化广播电视集团的《杭州新闻联播》节目&#xff0c;使用AI主持人进行新闻播报&#xff0c;且做到了0失误率&#xff0c;可见AI正在逐渐取代部分行业和一些重复性的工作&#xff0c;这一现象引发很…...

android为第三方提供部分系统接口

文章目录 Settings - 亮灭屏Settings - 恢复出厂设置Settings - 数字锁屏/解锁Settings - 设置系统时间PackageInstaller - 安装/卸载第三方应用摘要:本文对系统模块进行改造,提供广播等形式的接口对外提供无法直接调用的系统级别接口,实现部分功能的集合。如果是广播形式,…...

Android 自定义View 加 lifecycle 简单使用

前言 本文是自定义view中最简单的使用方法&#xff0c;分别进行 ‘onMeasure’、‘onDraw’、‘自定义样式’、‘lifecycle’的简单使用&#xff0c;了解自定义view的使用。 通过lifecycle来控制 动画的状态 一、onMeasure做了什么&#xff1f; 在onMeasure中获取view 的宽和…...

在K8S中,svc底层是如何实现的?

在Kubernetes中&#xff0c;Service是集群内部的一个抽象层&#xff0c;用于定义一组Pod的逻辑分组&#xff0c;并提供统一的访问入口点&#xff0c;同时还可以对这些Pod提供负载均衡和网络代理功能。Service底层的实现主要包括以下几个关键组件和技术&#xff1a; 标签选择器…...

Python pyqt小技巧:默认打开某文件(即自动加载某文件)

文章目录 前言 前言 有的时候需要界面自动加载某文件。不需要人为在打开选择。 import os #自带 import sys # 获取该程序当前文件目录dir_name os.path.dirname(os.path.realpath(sys.argv[0])) f1 os.path.join(dir_name, 题目调度规程.xls) # 拼接路径 文件必须和程序在…...

vue2实现组件库的自动按需引入,unplugin-auto-import,unplugin-vue-components

1.使用ant-design-vue或者element-ui时&#xff0c;如何每个组件都去import导入组件&#xff0c;大大降低了开发效率&#xff0c;如果全局一次性注册会增加项目体积&#xff0c;那么如何实现既不局部引入&#xff0c;也不全局注册&#xff1f; 2.在element-plus官网看到有说明…...

C++第十节:map和set的介绍与使用

【本节要点】 1.关联式容器2.键值对3.map介绍与使用4.set介绍与使用5.multimap与multisedd的介绍与使用 一、关联式容器&#xff1a;数据管理的核心利器 关联式容器是STL中用于高效存储和检索键值对&#xff08;key-value pair&#xff09;的数据结构&#xff0c;其底层基于红黑…...

线性代数笔记28--奇异值分解(SVD)

1. 奇异值分解 假设矩阵 A A A有 m m m行 n n n列 奇异值分解就是在 A A A的行向量上选取若干对标准正交基&#xff0c;对它作 A A A矩阵变化并投射到了 A A A的列空间上的正交基的若干倍数。 A v → u → σ u → ∈ R m v → ∈ R n A\overrightarrow{v}\overrightarrow{u…...

【从零开始学习计算机科学】硬件设计与FPGA原理

硬件设计 硬件设计流程 在设计硬件电路之前,首先要把大的框架和架构要搞清楚,这要求我们搞清楚要实现什么功能,然后找找有否能实现同样或相似功能的参考电路板(要懂得尽量利用他人的成果,越是有经验的工程师越会懂得借鉴他人的成果)。如果你找到了的参考设计,最好还是…...

项目中同时使用Redis(lettuce)和Redisson的报错

温馨提示&#xff1a;图片有点小&#xff0c;可以放大页面进行查看... 问题1&#xff1a;版本冲突 直接上图&#xff0c;这个错表示依赖版本不匹配问题&#xff0c;我本地SpringBoot用的是2.7&#xff0c;但是Redisson版本用的3.32.5。 我们通过点击 artifactId跟进去 发现它…...

leetcode-数组

26. 删除有序数组中的重复项 已解答 简单 相关标签 相关企业 提示 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 n…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...