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

SpringMVC系列二: 请求方式介绍

@RequestMapping

  • 💞基本使用
  • 💞@RequestMapping注解其它使用方式
    • 可以修饰类和方法
    • 可以指定请求方式
    • 可以指定params和headers支持简单表达式
    • 支持Ant 风格资源地址
    • 配合@PathVariable 映射 URL 绑定的占位符
    • 注意事项和使用细节
    • 课后作业

上一讲, 我们学习的是SpringMVC系列一: 初识SpringMVC

现在打开springmvc项目

在这里插入图片描述

💞基本使用

RequestMapping注解可以指定控制器/处理器的某个方法的请求的url.
在这里插入图片描述

💞@RequestMapping注解其它使用方式

可以修饰类和方法

1.说明: @RequestMapping注解可以修饰方法, 还可以修饰类. 当同时修饰类和方法时, 请求的url 就是组合 /类请求值/方法请求值

案例
1.com.zzw.web包下 新建UserHandler

@RequestMapping(value = "/user")
@Controller //UserHandler就是一个处理器/控制器, 会注入到容器
public class UserHandler {/*** 1.method=RequestMethod.POST: 表示请求buy目标方法必须是 post* 2.RequestMethod 四个常用选项 POST, GET, PUT, DELETE[后面会详解]* 3.SpringMVC 控制器默认支持GET和POST两种方式** buy()方法请求的url: http://ip:port/工程路径/user/buy* @return*/@RequestMapping(value = "/buy", method = RequestMethod.POST)public String buy() {System.out.println("购买.");return "success";}
}

2.web路径/WEB-INF/pages目录 新建success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>操作成功</title>
</head>
<body>
<h1>恭喜, 操作成功~</h1>
</body>
</html>

3.web路径下 新建request.jsp, 测试

<body>
<%--解读
1. action="user/buy" 对应 url http://localhost:8080/工程路径/user/buy
--%>
<form action="user/buy" method="post">购买人: <input type="text" name="username"/><br/>购买量: <input type="password" name="nums"/><br/><input type="submit" value="购买">
</form>
</body>

4.访问成功
在这里插入图片描述

可以指定请求方式

1.说明: @RequestMapping可以指定请求方式(post/get/put/delete..), 请求的方式要和指定的一样, 否则报错.

2.SpringMVC控制器默认支持GETPOST两种方式, 也就是你不指定method, 可以接收GETPOST请求

3.应用案例
在这里插入图片描述
在这里插入图片描述

4.当你明确指定了method, 则需要按指定方式请求, 否则会报错.
在这里插入图片描述

可以指定params和headers支持简单表达式

1.param1:表示请求必须包含名为param1的请求参数. 比如 params = "bookId"
2.!param1:表示请求不能包含名为param1的请求参数. 比如 params = "!bookId"
3.param1 = value1:表示请求包含名为param1的请求参数, 且其值必须为value1. 比如 params = "bookId=100"
4.param1 != value1:表示请求包含名为param1的请求参数, 但其值不能为value1. 比如 params = "bookId!=100"
5.{"param1=value1", "param2"}:请求必须包含名为param1, param2的两个请求参数, 且param1参数的值必须为value1. 比如params = {"bookId=100", "price"}


案例
1.修改UserHandler.java增加方法search

@RequestMapping(value = "/user")
@Controller //UserHandler就是一个处理器/控制器, 会注入到容器
public class UserHandler {/*** 解读* 1. params="bookId" 表示请求该目标方法时, 必须给一个bookId参数, 值没有限定* 2. search(String bookId) 表示请求目标方法时, 携带的bookId=100, 就会将请求携带的 bookId*    对应的值, 赋给 String bookId* @param bookId* @return*/@RequestMapping(value = "/find", params = "bookId", method = RequestMethod.GET)public String search(String bookId) {System.out.println("查询书籍 bookId=" + bookId);return "success";}
}

2.修改request.jsp

<body>
<h1>演示params的使用</h1>
<a href="user/find?bookId=100">查询书籍</a>
</body>

3.操作成功
在这里插入图片描述
如果bookId改为bookIdx, 报错
在这里插入图片描述


细节1:如果需要有bookId参数, 并且值为100. 否则报错.

@RequestMapping(value = "/find", params = "bookId=100", method = RequestMethod.GET)

修改request.jsp

<body>
<h1>演示params的使用</h1>
<a href="user/find?bookId=200">查询书籍</a>
</body>

报错
在这里插入图片描述

细节2:需要有bookId参数, 并且值不为100. 否则报错.

@RequestMapping(value = "/find", params = "bookId!=100", method = RequestMethod.GET)

修改request.jsp

<body>
<h1>演示params的使用</h1>
<a href="user/find?bookId=100">查询书籍</a>
</body>

报错
在这里插入图片描述

支持Ant 风格资源地址

1.?: 匹配文件名中的一个字符
2.*: 匹配文件名中的任意字符
3.**: 匹配多层路径

4.举例
/user/*/createUser:匹配/user/aaa/createUser, /user/bbb/createUserURL
/user/**/createUser:匹配/user/createUser, /user/aaa/bbb/createUserURL
/user/createUser??:匹配/user/createUseraa, /user/createUserbbURL

案例
1.修改UserHandler.java增加方法im

@RequestMapping(value = "/user")
@Controller //UserHandler就是一个处理器/控制器, 会注入到容器
public class UserHandler {/*** 要求: 可以配置 /user/message/aa, /user/message/aa/bb/cc* @RequestMapping(value="/message/**") 表示可以匹配多层路径*/@RequestMapping(value = "/message/**")public String im() {System.out.println("发送消息");return "success";}
}

2.修改request.jsp

<body>
<hr><h1>演示Ant风格的请求资源方式</h1>
<a href="user/message/aa">发送消息1</a>
<a href="user/message/aa/bb/cc">发送消息2</a>
</body>

3.测试成功…

配合@PathVariable 映射 URL 绑定的占位符

1.@RequestMapping可以配合@PathVariable映射URL绑定的占位符
2.这样就不需要在url地址上带参数名了, 更加的简洁明了.

案例
1.修改UserHandler.java增加方法register

@RequestMapping(value = "/user")
@Controller //UserHandler就是一个处理器/控制器, 会注入到容器
public class UserHandler {/*** 前端页面: <a href="user/reg/Kristina/300">占位符的演示</a>* (value="/reg/{username}/{userId}"): 表示Kristina=>{username} 300=>{userId}** @return*/@RequestMapping(value = "/reg/{username}/{userId}")public String register(@PathVariable("username") String name,@PathVariable("userId") int id) {System.out.println("接收到参数--" + "username=" + name + "--" + "userId=" + id);return "success";}
}

2.修改request.jsp

<body>
<hr/><h1>占位符的演示</h1>
<a href="user/reg/Kristina/300">占位符的演示</a>
</body>

3.测试成功…

注意事项和使用细节

1.映射的URL, 不能重复

@RequestMapping(value = "/user")
@Controller //UserHandler就是一个处理器/控制器, 会注入到容器
public class UserHandler {@RequestMapping(value = "/hi")public String hi() {System.out.println("hi");return "success";}@RequestMapping(value = "/hi")public String hi2() {System.out.println("hi");return "success";}
}

启动或重新发布时, 会报错. to { [/user/hi]}: There is already 'userHandler' bean method


2.各种简写的方式

@RequestMapping(value=“/buy”,method=RequestMethod.POST) 等价 @PostMapping(value=“/buy”)

简写方式一览: @GetMapping @PostMapping @PutMapping @DeleteMapping
在这里插入图片描述

案例

@RequestMapping(value = "/user")
@Controller //UserHandler就是一个处理器/控制器, 会注入到容器
public class UserHandler {/*** 5.@PostMapping(value="/buy") 等价 @Request(value="/buy", method=RequestMapping.POST)* @return*///@RequestMapping(value = "/buy", method = RequestMethod.POST)@PostMapping(value = "/buy")public String buy() {System.out.println("购买.");return "success";}
}

测试request.jsp

<body>
<form action="user/buy" method="get">购买人: <input type="text" name="username"/><br/>购买量: <input type="password" name="nums"/><br/><input type="submit" value="购买">
</form>
</body>

报错
在这里插入图片描述


3.如果我们确定表单或者超链接会提交某个字段数据比如email, 要求提交的参数名和目标方法的参数名保持一致.

案例
1.修改UserHandler.java增加方法hello3

@RequestMapping(value = "/user")
@Controller //UserHandler就是一个处理器/控制器, 会注入到容器
public class UserHandler {/*** hello3(String email) 表示如果我们的请求参数有 email=xx, 就会将传递的值, 赋给String email* , 要求名称保持一致, 如果不一致, 那么接收不到数据, 而是null* @param email* @return*/@RequestMapping(value = "/hello3")public String hello3(String email) {System.out.println("email=" + email);return "success";}
}

2.测试 浏览器地址栏 输入http://localhost:8080/springmvc/user/hello3?email=978964140@qq.com, 一定要注意提交参数名和后台方法的形参名保持一致, 否则后端接收不到参数

在这里插入图片描述
在这里插入图片描述

3.如果输入一个错误的参数名, 那么后端接收不到数据
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

课后作业

1.熟悉SpringMVC的执行流程图
2.熟悉@RequestMapping注解的使用方式
3.编写一个表单, 以Post的方式提交Computer信息, 后端编写ComputerHandler, 可以接收到信息.


代码实现

1.修改request.jsp

<body>
<h1>电脑信息</h1>
<form action="?" method="post">品牌:<input type="text" name="brand"/><br/>价格:<input type="text" name="price"/><br/>数量:<input type="text" name="nums"/><br/><input type="submit" value="提交">
</form>
</body>

2.com.zzw.web包下 新建ComputerHandler

@RequestMapping(value = "/computer")
@Controller
public class ComputerHandler {//这里一定要注意, info方法的形参名需要和请求的参数名保持一致@PostMapping(value = "/info", params = {"brand", "price", "nums"})public String info(String brand, String price, String nums) {System.out.println("电脑信息--brand=" +  brand+ "--price=" + price + "--nums" + nums);return "success";}
}

3.配置页面访问路径

<form action="computer/info" method="post">

4.测试成功…
在这里插入图片描述


在这里插入图片描述

下一讲, 我们学习SpringMVC系列三: Postman(接口测试工具)

相关文章:

SpringMVC系列二: 请求方式介绍

RequestMapping &#x1f49e;基本使用&#x1f49e;RequestMapping注解其它使用方式可以修饰类和方法可以指定请求方式可以指定params和headers支持简单表达式支持Ant 风格资源地址配合PathVariable 映射 URL 绑定的占位符注意事项和使用细节课后作业 上一讲, 我们学习的是Spr…...

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式&#xff0c;可以快速查找问题解析&#xff0c;加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语…...

C# 关于通讯观察线程(1) -- 开启通讯线程

通讯观察线程是个有意思&#xff0c;又是非常实用的功能。 具体怎么实现呢&#xff0c;我们来看看主要过程的伪代码。对于高手这也许很简单&#xff0c;但是要用好也是需要实践到通讯的流程正确&#xff0c;同时应对好网络故障等。 先在合适的地方启动观察线程&#xff1a; …...

15.树形虚拟列表实现(支持10000+以上的数据)el-tree(1万+数据页面卡死)

1.问题使用el-tree渲染的树形结构&#xff0c;当数据超过一万条以上的时候页面卡死 2.解决方法&#xff1a; 使用vue-easy-tree来实现树形虚拟列表&#xff0c;注意&#xff1a;vue-easy-tree需要设置高度 3.代码如下 <template><div class"ve-tree" st…...

【服务器07】之【GitHub项目管理】及【Unity异步加载场景】

登录GitHub官网 GitHub: Let’s build from here GitHub 注册账号 登录账号 输入一个自定义名字&#xff0c;点击创建存储库就可以了 现在我们下载Fork Fork - a fast and friendly git client for Mac and Windows (git-fork.com) 免费的 下载完成之后点击File下的Clone …...

ansible提权之become_method与become_flags详解

目录 常见become_methodbecome_flagssu 常见选项总结sudo 常见选项总结pbrun 常见选项总结pfexec 常见选项总结doas 常见选项总结示例使用 sudo 的示例&#xff1a;使用 pbrun 的示例&#xff1a;使用 pfexec 的示例&#xff1a;使用 doas 的示例&#xff1a; 配置方式1. 配置文…...

elementui的el-dialog组件与el-tabs同时用导致浏览器卡死的原因解决

在el-dialog弹出框中&#xff0c;如果使用el-tabs&#xff0c;点击弹框的关闭按钮时&#xff0c;会导致弹出框无法关闭&#xff0c;且浏览器卡死。 解决方式&#xff08;一&#xff09;&#xff1a; 在el-talbs的面板中不放任何内容&#xff1a; <el-tab-pane label"…...

基于图扑 HT for Web 实现拓扑关系图

拓扑结构在计算机网络设计和通信领域中非常重要&#xff0c;因为它描述了网络中的设备&#xff08;即“点”&#xff09;如何相互连接&#xff08;即通过“线”&#xff09;。这种结构不仅涉及物理布局&#xff0c;即物理拓扑&#xff0c;还可以涉及逻辑或虚拟的连接方式&#…...

linux笔记10--编辑器之神VIM

文章目录 1. 简单介绍① 为什么叫vim② linux常见的编辑器③ 注意事项④ 其它 2. 操作模式的划分① 两种 -- 国际上普通模式(命令操作模式)插入模式 ② 三种 -- 国内普通模式如何进入与退出界面 插入模式如何进入与退出界面 命令模式如何进入与退出界面常见的命令模式 ③ 区别④…...

安全管理中心-集中管控(6点)

记忆内容&#xff1a; 应划分出特定的管理区域&#xff0c;对分布在网络中的安全设备或安全组件进行管控。&#xff08;三级新增&#xff09; 应能够建立一条安全的信息传输路径&#xff0c;对网络中的安全设备或安全组件进行管理。&#xff08;三级新增&#xff09; 应对网络…...

使用electron打包Vue前端项目的详细流程

使用electron打包Vue前端项目的详细流程 需要更改的东西 路由模式的修改 # 修改前&#xff1a;url不带#mode: history# 修改后&#xff1a;url带#mode: hash全局修改Cookies为localStorage 由于打包成exe或deb这类可执行文件后&#xff0c;本地是没有 Cookies 全局搜索Cooki…...

《计算机英语》 Unit 4 Information Management 信息管理

Section A Information Storage 信息存储 1. The importance of Information信息的重要性 词汇 reside vi属于&#xff0c;驻留 tablet n平板电脑 laptop n笔记本电脑 repository n仓库 claim n索赔 regulatory n法规 contractua…...

如何打包数据库文件

使用 mysqldump 命令&#xff1a; mysqldump -u username -p database_name > output_file.sql username 是数据库的用户名。database_name 是要导出的数据库名称。output_file.sql 是导出的 SQL 文件名&#xff0c;可以自定义。 示例&#xff1a; mysqldump -u root -p…...

iOS抓包指南 正则过滤爬取

解读iOS抓包 抓包 &#xff08;packet capture&#xff09;就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作&#xff0c;也用来检查网络安全。抓包也经常被用来进行数据截取等。 什么是正则表达式&#xff1f; 正则表达式(regular expression)是用来描述…...

FLASH仿真EEPROM---基于智芯Z20K11XM

一、介绍 电可擦和可编程只读存储器(EEPROM)可以对字节或字编程和擦除。EEPROM中的数据即使断电也能保持&#xff0c;但Z20K1xx芯片不含EEPROM。然而&#xff0c;闪存可以通过EEPROM仿真软件来模拟EEPROM。Z20K1xx包含两个flash阵列。编程和擦除操作可以在一个数组上进行&#…...

阿里云PAI大模型评测最佳实践

作者&#xff1a;施晨、之用、南茵、求伯、一耘、临在 背景信息 内容简介 在大模型时代&#xff0c;随着模型效果的显著提升&#xff0c;模型评测的重要性日益凸显。科学、高效的模型评测&#xff0c;不仅能帮助开发者有效地衡量和对比不同模型的性能&#xff0c;更能指导他…...

应用图扑 HT for Web 搭建拓扑关系图

拓扑结构在计算机网络设计和通信领域中非常重要&#xff0c;因为它描述了网络中的设备&#xff08;即“点”&#xff09;如何相互连接&#xff08;即通过“线”&#xff09;。这种结构不仅涉及物理布局&#xff0c;即物理拓扑&#xff0c;还可以涉及逻辑或虚拟的连接方式&#…...

Django Aggregation 使用指南

Django Aggregation 使用指南 在构建Django应用时&#xff0c;我们经常需要对数据库中的数据进行汇总或聚合操作。例如&#xff0c;计算某个字段的平均值、最大值或最小值。这篇文章将详细介绍如何在Django中使用聚合查询&#xff0c;并结合实例进行说明。 聚合查询简介 Dja…...

嵌入式学习——Linux操作系统——文件编程练习

1.使用fread和fwrite方式完成任意普通文件的拷贝功能。 模拟 文件下载 #include <stdio.h>void do_copy(FILE *fp_s,FILE *fp_d) {char buf[100] {0};int ret;while (ret fread(buf,sizeof(char),sizeof(buf),fp_s))fwrite(buf,sizeof(char),ret,fp_d); }//./a.out sr…...

用JavaScript实现了一个简单的图像坐标点标注工具

这段代码实现了一个简单的图像标注工具&#xff0c;允许用户在加载的图像上进行点选标注&#xff0c;并且通过右键确认一个点序列来形成一个多边形。 标注效果如下 实现代码如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"U…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...