【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的情况,如下所示:

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高效编程指南:PyCharm与DeepSeek的完美结合

DeepSeek接入Pycharm 前几天DeepSeek的充值窗口又悄悄的开放了,这也就意味着我们又可以丝滑的使用DeepSeek的API进行各种辅助性工作了。本文我们来聊聊如何在代码编辑器中使用DeepSeek自动生成代码。 注:本文适用于所有的JetBrains开发工具&#xff0c…

deepseek使用记录18——艺术的追问

一 好的,基于前面学习结果,再写一篇有艺术美的文章 《美的起义》 凌晨四点的茶摊在电子支付二维码下苏醒,蒸腾的水汽中浮动着八百年前建盏的釉色。老板娘把栀子花插在共享单车车筐里,花瓣的弧度与北宋汝窑青瓷的冰裂纹暗合&…

Docker参数,以及仓库搭建

一。Docker的构建参数 注释: 1.对于CMD,如果不想显示,而是使用交互界面:docker run -ti --rm --name test2 busybox:v5 sh 2.对于CMD,一个交互界面只可以使用一个,如果想多次使用CMD,则用ENTR…

并发编程——累加器

目录 1 AtomicLong 1.1 核心功能 1.2 实现原理: (1)基于 Unsafe 的底层操作 (2) volatile字段的内存可见性 (3)CAS 操作与 ABA 问题 1.3 性能分析 1.4 使用场景 2 LongAdder 核心设计原理 1 分段存储 2 分散更新策略 3.处理高竞…

10 【HarmonyOS NEXT】 仿uv-ui组件开发之Avatar头像组件开发教程(一)

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! 目录 第一篇:Avatar 组件基础概念与设计1. 组件概述2. 接口设计2.1 形状类型定义2.2 尺寸类型定义2.3 组件属性接口 3. 设计原则4. 使用…

天津大学02-深度解读DeepSeek:部署、使用、安全【文末附下载链接】

大模型风险与不当用例——价值观错位 大模型与人类价值观、期望之间的不一致而导致的安全问题,包含:• 社会偏见(Social Bias)LLM在生成文本时强化对特定社会群体的刻板印象,例如将穆斯林与恐怖主义关联,或…

C#程序加密与解密Demo程序示例

目录 一、加密程序功能介绍 1、加密用途 2、功能 3、程序说明 4、加密过程 5、授权的注册文件保存方式 二、加密程序使用步骤 1、步骤一 ​编辑2、步骤二 3、步骤三 4、步骤四 三、核心代码说明 1、获取电脑CPU 信息 2、获取硬盘卷标号 3、机器码生成 3、 生成…

《Python实战进阶》No14: 使用Dask处理大规模数据集

文章特色: 包含3个核心代码块,覆盖延迟计算、分块策略和云原生集成4个架构图/监控面板示意图的占位说明对比表格清晰展示技术选型差异实战案例包含从数据读取到机器学习的完整流水线扩展思考部分引入最新云原生技术实践 Dask 是一个灵活的开源库&#…

React + React-intl @3.xx + TypeScript

声明:此篇文章使用的版本是 "react-intl": "^3.12.0"。 因为react-intl3.xx版本相较于react-intl2.xx版本差别较大,有些API是break change, 所以这篇文章的实现方式,不适用于react-intl2.xx版本。 一: 安装react-intl np…

TON基金会确认冠名赞助2025香港Web3嘉年华,并将于4月8日重磅呈现“TON生态日”

近日,由万向区块链实验室与HashKey Group联合推出的Web3年度盛典——2025香港Web3嘉年华正式宣布,TON基金会确认成为本届嘉年华的冠名赞助商,并将于4月8日在主会场特别举办“TON生态日”专题Side Event,集中展现TON生态的最新技术…

IDEA 基础配置: maven配置 | 服务窗口配置

文章目录 IDEA版本与MAVEN版本对应关系maven配置镜像源插件idea打开服务工具窗口IDEA中的一些常见问题及其解决方案IDEA版本与MAVEN版本对应关系 查找发布时间在IDEA版本之前的dea2021可以使用maven3.8以及以前的版本 比如我是idea2021.2.2 ,需要将 maven 退到 apache-maven-3.…

Mybatis详解-上

目录 Mybatis概述 快速入门 引入依赖 配置数据库参数 持久层代码 基本介绍 一个参数变量 多个参数变量 新增 将自增主键id赋值到userinfo对象里 参数重命名 删除 修改 查询 sql语句重命名的方法查询 指定结果映射关系 复用结果映射关系 驼峰转换 MyBatis的XM…

【PSIM】峰值电流如何用D类触发器

最近做实验发现很多人用D类触发器代替RS触发器进行峰值电流控制。研究了一下发现确实效果更好(模电数电还给老师了。。) 这篇文章研究一下PSIM中D类触发器的使用,以及如何实现峰值电流控制 选用的是带设置重置的D触发器,见下图 …

项目设计之用户注册与登录

流程 表设计 create table if not exists kanyuServer.user_db (id bigint unsigned auto_increment comment 主键primary key,phone varchar(11) not null comment 手机号码,password varchar(128) default null comment 密码,加密存储,user_name varchar(32) de…

贪吃蛇身匀速运动模型

通用运动模型 我们已知斜线为移动的距离 d d d, x x x轴总偏移量为 d x dx dx, y y y轴总偏移量为 d y dy dy,在一帧当中,我们也知道能走的距离为 m d md md。那么作为一般的运动模型,该如何确定我们进行移动的方向呢&…

项目管理工具 Maven

目录 1.Maven的概念 1.1​​​​​什么是Maven 1.2什么是依赖管理 1.3什么是项目构建 1.4Maven的应用场景 1.5为什么使用Maven 1.6Maven模型 2.初识Maven 2.1Maven安装 2.1.1安装准备 2.1.2Maven安装目录分析 2.1.3Maven的环境变量 2.2Maven的第一个项目 2.2.1按照约…

SSM架构 +Nginx+FFmpeg实现rtsp流转hls流,在前端html上实现视频播放

序言: 本文介绍通过SSM架构 NginxFFmpeg实现rtsp流转hls流,在前端html上实现视频播放功能。此方法可用于网络摄像头RTSP视频流WEB端实时播放。(海康和大华都可以),我使用的是海康 步骤一:安装软件 FFmpeg…

超链接打开新页签传递参数

背景 有一个需求,网站1点击按钮后跳转到页面2,页面1和页面2的域名不同,并且需要传递参数A,再 那么最简单的就是 在url上带参数A 比如 https://xx.com?Axxx ,从url上的queryParam上就能获取参数 但很可惜&#xff0c…

【入门级篇】保姆级教程:零基础实现DeepSeek本地部署的两种终极方案(附避坑指南)

关于DeepSeek的革命性冲击的看法 大家好,前阵子在忙着DeepSeek的一些本地化部署和一些开发工具,工作流的工作,最近刚好有空,借助零散时间给大家分享下DeepSeek的一些应用,为此我写了一篇专栏,从浅入深的介绍DeepSeek的一些技术,应用,以及DeepSeek的论文分析。 首先我们…

nginx简单命令启动,关闭等

启动命令 #启动nginx start nginx重启命令 比如修改了配置文件,用这个命令重启生效 #重启nginx nginx -s reload3,查看端口占用 #查看端口占用 netstat -aon4,关闭nginx 如果使用cmd命令窗口启动nginx, 关闭cmd窗口是不能…