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(接口测试工具)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年618购物狂欢节买什么最超值!618不可错过的好物清单!

618年中大促再度来临。对于购物爱好者来说&#xff0c;这无疑是一个不容错过的购物盛宴。那么&#xff0c;在这个618&#xff0c;哪些好物值得你重点关注呢&#xff1f;我特地整理了一份推荐清单&#xff0c;这些产品不仅经过我的亲身体验&#xff0c;更以其出色的实用性和高性…

【嵌入式】适配大多数STM32的最小系统设计

大多数的参赛作品以及毕业设计中都仅仅简单的使用STM32F103最小系统板加上洞洞板或面包板。这样的设计虽然可以进行功能演示&#xff0c;但是由于市面上的最小系统板太过简单&#xff0c;并没有发挥出STM32系列MCU的强大功能&#xff0c;而且看起来很不美观&#xff0c;为了在参…

Scott Brinker:API对今天的Martech用户来说「非常重要」 ,但它们对即将到来的人工智能代理浪潮至关重要

API在Martech中非常重要 猜一猜空格应该填什么&#xff1a; _______之于AI代理就像数据之于AI模型 正如你可能从我的标题猜到的那样&#xff0c;答案是API。让我们讨论一下为什么…… 数据是人工智能模型的差异化 在过去的一年半里&#xff0c;人工智能疯狂的超级炒作周期…

阻力支撑相对强度(RSRS)选股系列报告之三

https://download.csdn.net/download/SuiZuoZhuLiu/89447699?spm1001.2014.3001.5503https://download.csdn.net/download/SuiZuoZhuLiu/89447699?spm1001.2014.3001.5503

高薪项目经理都在用的工具,你会几个?

甘特图、里程碑图、看版图、燃尽图、WBS、思维导图、流程图、鱼骨图、清单表、项目日历、关系矩阵、PERT图、决策树、状态表。这些工具&#xff0c;你会几个&#xff1f; 甘特图&#xff08;Gantt Chart&#xff09; 甘特图是一种条形图&#xff0c;用于展示项目任务的时间线&…

所以spring mvc异常处理工作原理是啥

文章目录 spring mvc异常处理&#xff08;源码分析&#xff09;概述原理&#xff08;源码角度&#xff09;模拟debug前期提要分析4个map4个map的初始化为什么需要基于mappedMethods缓存 总结一下 spring mvc异常处理&#xff08;源码分析&#xff09; 概述 spring mvc有下面三…

压测怎么做?如何自动化?盘点各大公司全链路压测方案与实践

本文综合盘点各大公司团队的全链路压测技术方案和实践路径&#xff0c;供大家参考。 一、什么是全链路压测&#xff1f; 全链路压测指的是基于实际的生产业务场景、系统环境&#xff0c;模拟海量的用户请求和数据对整个业务链进行压力测试&#xff0c;并持续调优的过程。常用…

30v-180V降3.3V100mA恒压WT5107

30v-180V降3.3V100mA恒压WT5107 WT5107是一款恒压单片机供电芯片&#xff0c;它可以30V-180V直流电转换成稳定的3.3V直流电&#xff08;最大输出电流300mA&#xff09;&#xff0c;为各种单片机供电。WT5107的应用也非常广泛。它可以用于智能家居、LED照明、电子玩具等领域。比…

功能强大的API函数FindFirstFile使用介绍(附源码)

在处理文件的相关代码中,会频繁使用到Windows系统API函数FindFirstFile,这个函数功能很强大,很多功能都不开它。本文就根据我们在项目中使用该函数的情况,来大概地梳理一下使用FindFirstFile都可以实现哪些常用的功能。 1、FindFirstFile函数声明与WIN32_FIND_DATA结构体 我…

Java的核心类库

引言 在Java编程中&#xff0c;熟练掌握常用类与对象操作是开发的基础。Java的核心类库提供了丰富的功能&#xff0c;可以帮助开发者高效地处理各种编程任务。本文将详细介绍Java字符串操作、集合框架、日期与时间处理等内容&#xff0c;并通过图表和表格进行总结与示范。 字符…

Selenium IED-控制已打开的Chrome浏览器

本文已收录于专栏 《自动化测试》 目录 背景介绍优势特点操作步骤总结提升 背景介绍 在我们进行自动化测试的过程中有时候会遇见一个很棘手的问题那就是登录的过程中需要图片验证码&#xff0c;图片验证码设计的初衷其实就是为了防自动化&#xff0c;防止一些人利用自动工具恶意…

B-splines曲线的绘制(Matlab)

虽然在这个链接三次 Bspline(B样条曲线) NURBS曲线的绘制 matlab_三次b样条曲线的绘制-CSDN博客中我们介绍了NURBS曲线&#xff0c;然而有时候我们通过B-spline曲线也能够解决问题。B-spline曲线作为NURBS曲线的一种特例&#xff0c;这里给出均匀B-spline曲线的表达式&#xff…

oracle12c到19c adg搭建(三)oracle19c数据库软件安装

由于这里的19c是做备库所以我们只安装软件不用创建实例&#xff0c;实例由主库同步过来 解压软件到安装目录 注意19c得db要直接解压到19c得软件安装目录 [rooto12u19p software]# ls V982063-01.zip [rooto12u19p software]# ls -ll total 2987996 -rw-r--r-- 1 root ro…

阿里云服务器无法远程登录连接:操作系统禁用了密码登录方式,会导致使用了正确的用户名和密码仍无法登录

阿里云服务器无法远程登录连接&#xff1a;操作系统禁用了密码登录方式&#xff0c;会导致使用了正确的用户名和密码仍无法登录 报错信息报错原因解决办法 报错信息 Workbench密码登录 登录失败 操作系统禁用了密码登录方式&#xff0c;会导致使用了正确的用户名和密码仍无法登…

充电学习—7、BC1.2 PD协议

BC1.2&#xff08;battery charging&#xff09;充电端口识别机制&#xff1a; SDP、CDP、DCP 1、VBUS detect&#xff1a;vbus检测 PD&#xff08;portable device&#xff0c;便携式设备&#xff09;中有个检测VBUS是否有效的电路&#xff0c;电路有个参考值&#xff0c;高…

Python-自动化运维-安装初始化

Python-自动化运维-安装初始化 第一部分-环境安装 第一部分-环境安装 专业版白嫖地址&#xff1a;https://signup.live.com/signup python环境&#xff08;windows&#xff09; pycharm环境&#xff08;windows&#xff09; 虚拟机&#xff08;ubantu/contos&#xff09; 开…

电脑丢失dll文件一键修复的方法有哪些?分析dll文件修复的多种策略

我们经常会遇到各种各样的问题&#xff0c;其中之一就是DLL文件的丢失。DLL文件&#xff08;动态链接库&#xff09;是操作系统和应用程序正常运行所必需的文件&#xff0c;当这些文件丢失或损坏时&#xff0c;可能会导致软件无法正常启动&#xff0c;甚至影响系统的稳定性。对…

深入探究RTOS的任务调度

阅读引言&#xff1a; 此文将会从一个工程文件&#xff0c; 一步一步的分析RTOS的任务调度实现&#xff0c; 这里选用FreeRTOS分析&#xff0c; 别的也差不多的&#xff0c; 可能在细节上有少许不一样。 目录 1&#xff0c; 常见嵌入式实时操作系统 2&#xff0c; 任务调度的…

鸿蒙原生应用元服务开发-位置服务申请权限

申请位置权限开发指导 场景概述 应用在使用位置服务系统能力前&#xff0c;需要检查是否已经获取用户授权访问设备位置信息。如未获得授权&#xff0c;可以向用户申请需要的位置权限。 系统提供的定位权限有&#xff1a; ohos.permission.LOCATION&#xff1a;用于获取精准位置…

Docker配置阿里云加速器(2续)

默认情况下镜像是从docker hub下载&#xff0c;由于docker hub服务器在国外&#xff0c;由于网络原因镜像下载速度较慢&#xff0c;一般会配置镜像加速进行下载 国内镜像加速器有阿里云、网易云、中科大等&#xff0c;本章配置阿里云镜像加速器&#xff0c;速度较快 镜像加速源…