Spring MVC: 请求参数的获取
Spring MVC
- 前言
- 通过 @RequestParam 注解获取请求参数
- @RequestParam
- 用法
- 通过 ServletAPI 获取请求参数
- 通过实体类对象获取请求参数
- 附
前言
在 Spring MVC 介绍中,谈到前端控制器 DispatcherServlet 接收客户端请求,依据处理器映射 HandlerMapping 配置调用相应的处理器 Controller 。那么,处理器 Controller 具体是如何实现获取请求参数的呢?
通过 @RequestParam 注解获取请求参数
@RequestParam
@RequestParam,用于在处理器 Controller 方法参数上获取 HTTP 请求参数的值。使用 @RequestParam 注解可以获取请求参数的值以及对请求参数进行类型转换或验证。
简单示例:
首先,创建一个 index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><body><h2>Hello World</h2><form action="${pageContext.request.contextPath}/paramTest" method="post">账号:<input type="text" name="name" value="" /><br>密码:<input type="password" name="password" value="" /><br><input type="submit" value="提交"></form></body>
</html>
接着,创建一个 accessing.jsp
<%--Created by IntelliJ IDEA.User: dellDate: 2023/7/18Time: 12:54To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body><h2>提交成功!</h2>
</body>
</html>
然后,获取表单中 name 和 password 参数的值
package cn.edu.springmvcdemo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;@Controller
public class ParamDemo {@RequestMapping("/index")public String index1(){return "index";}@RequestMapping("/paramTest")//@RequestParam 的 value 值需要与表单中的参数名字(name值)保持一致,而 paramTest() 方法中的参数名字(str1、str2)可以随机填写public String paramTest(@RequestParam(value = "name") int str1,@RequestParam(value = "password") String str2){System.out.println("账号 = " + str1);System.out.println("密码 = " + str2);return "accessing";}
}
注:当处理器 Controller 方法中的参数名字与表单中的参数名字不一致时,需要 @RequestParam 的 value 值指定参数名字
最后,测试结果
结果如图:
1.输入账号和密码,点击提交
2.成功提交,跳转到 accessing.jsp
3.获取到相应的参数值
用法
1. 在上面的示例中,Spring MVC 会自动根据参数名字来注入,所以 @RequestParam(value = " ") 的部分可以省略,但需要处理器 Controller 方法中的参数名字与表单中的参数名字(name值)保持一致。
如图:
或者
2. 在上面的示例中,name 为 int 类型,当输入为空时,数据赋值为 null ,页面会报错。
如图:
1.输入为空,直接点击提交
2.页面报错
解决:
1.使用 @RequestParam 注解的 defaultValue 属性设置数据默认值
2.使用 @RequestParam 注解的 required 属性设置值为 false(默认参数赋值为 null ),并将 int 类型改为 Integer 类型
通过 ServletAPI 获取请求参数
使用 ServletAPI 获取参数值
简单示例:
通过 HttpServletRequest 获取参数值
package cn.edu.springmvcdemo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;@Controller
public class ParamDemo {@RequestMapping("/index")public String index1(){return "index";}//1.使用 @RequestParam 注解获取参数值@RequestMapping("/paramTest")public String paramTest(@RequestParam(required = false) Integer name,@RequestParam String password){System.out.println("账号 = " + name);System.out.println("密码 = " + password);return "accessing";}//2.使用 HttpServletRequest 直接获取参数值@RequestMapping("/paramHSR")public String paramHSR(HttpServletRequest req, HttpServletResponse resp) throws UnsupportedEncodingException {req.setCharacterEncoding("UTF-8");int name = Integer.parseInt(req.getParameter("name"));String password = req.getParameter("password");System.out.println("账号 = " + name);System.out.println("密码 = " + password);return "accessing";}
}
另外,index.jsp 中修改路径
结果如图:
通过实体类对象获取请求参数
使用普通 java 对象(POJO)获取参数值
简单示例:
首先,创建一个实体类 ParamUser ,定义账号和密码属性
package cn.edu.springmvcdemo.model;public class ParamUser {private int name;private String password;public ParamUser() {super();}public ParamUser(int name, String password) {this.name = name;this.password = password;}public int getName() {return name;}public String getPassword() {return password;}public void setName(int name) {this.name = name;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "ParamUser{" +"name=" + name +", password='" + password + '\'' +'}';}
}
接着,通过 ParamUser 对象来调用 get() 方法获取参数值
注:对象属性名字和请求参数名字需要保持一致
package cn.edu.springmvcdemo.controller;import cn.edu.springmvcdemo.model.ParamUser;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException;@Controller
public class ParamDemo {@RequestMapping("/index")public String index1(){return "index";}//1.使用 @RequestParam 注解获取参数值@RequestMapping("/paramTest")public String paramTest(@RequestParam(required = false) Integer name,@RequestParam String password){System.out.println("账号 = " + name);System.out.println("密码 = " + password);return "accessing";}//2.使用 HttpServletRequest 直接获取参数值@RequestMapping("/paramHSR")public String paramHSR(HttpServletRequest req, HttpServletResponse resp) throws UnsupportedEncodingException {req.setCharacterEncoding("UTF-8");int name = Integer.parseInt(req.getParameter("name"));String password = req.getParameter("password");System.out.println("账号 = " + name);System.out.println("密码 = " + password);return "accessing";}//3.POJO 传值方式获取参数值@RequestMapping("/paramUser")//设置实体类形参public String paramUser(ParamUser user){System.out.println("账号 = " + user.getName());System.out.println("密码 = " + user.getPassword());return "accessing";}
}
另外,index.jsp 中修改路径
结果如图:
附
下面简单介绍处理器 Controller 获取前端其他的请求信息的注解,了解即可。
@RequestHeader:用于将 HTTP 请求头中的参数值映射到处理器 Controller 方法参数中
- 常用属性如下:
– name:参数名称
– required:boolean类型,默认为true,即请求头中必须包含此参数
– defaultParameter:为请求头中的参数提供默认值
@CookieValue:用于从 HTTP 请求的 Cookie 中获取指定的值
- 常用属性如下:
– value:参数名称
– required:boolean类型,默认为true,即请求头中必须包含此参数
– defaultValue:设置 Cookie 的默认值
相关文章:

Spring MVC: 请求参数的获取
Spring MVC 前言通过 RequestParam 注解获取请求参数RequestParam用法 通过 ServletAPI 获取请求参数通过实体类对象获取请求参数附 前言 在 Spring MVC 介绍中,谈到前端控制器 DispatcherServlet 接收客户端请求,依据处理器映射 HandlerMapping 配置调…...
别再头疼反弹Shell失败了,这篇文章带你找到问题根源
别再头疼反弹Shell失败了,这篇文章带你找到问题根源 在渗透测试中,反弹shell失败的原因可以有多种。以下是一些常见的原因: **1.防火墙和网络过滤器:**目标系统可能配置了防火墙或网络过滤器,以限制对外部系统的连接…...

第五章 树与二叉树 四、线索树(手算与代码实现)
一、定义 1.线索树是一种二叉树,它在每个节点上增加了两个指针,分别指向其前驱和后继。 2.这些指针称为“线索”,因此线索树也叫做“线索化二叉树”。 3.在线索树中,所有的叶子节点都被线索化,使得遍历树的过程可以…...
服务器前后端学习理解
个人兴趣,突然想起来记录一下 1. 背景 想做一个最简单的网页,点击按钮后,访问服务器的redis数据库,读取一个为hello的值并显示 首先用js写了一个脚本,使用redis包,读取到了数据,并使用consol.l…...

python-数据分析-numpy、pandas、matplotlib的常用方法
一、numpy import numpy as np1.numpy 数组 和 list 的区别 输出方式不同 里面包含的元素类型 2.构造并访问二维数组 使用 索引/切片 访问ndarray元素 切片 左闭右开 np.array(list) 3.快捷构造高维数组 np.arange() np.random.randn() - - - 服从标准正态分布- - - …...

ChatGPT⼊门到精通(5):ChatGPT 和Claude区别
⼀、Claude介绍 Claude是Anthropic开发的⼀款⼈⼯智能助⼿。 官⽅⽹站: ⼆、Claude能做什么 它可以通过⾃然语⾔与您进⾏交互,理解您的问题并作出回复。Claude的主要功能包括: 1、问答功能 Claude可以解答⼴泛的常识问题与知识问题。⽆论是历史上的某个事件,理科…...

ChatGPT 总结数据分析的所有知识点
ChatGPT功能非常多,特别是对某个行业,某个方向,某个技术进行总结那是相当专业的。 如下图。 直接用一个指令便总结出来数据分析当中的所有知识点内容。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Ex…...

hadoop-HDFS
1.HDFS简介 2.1 Hadoop分布式文件系统-HDFS架构 2.2 HDFS组成角色及其功能 (1)Client:客户端 (2)NameNode (NN):元数据节点 管理文件系统的Namespace元数据 一个HDFS集群只有一个Active的NN ÿ…...

0202hdfs的shell操作-hadoop-大数据学习
文章目录 1 进程启停管理2 文件系统操作命令2.1 HDFS文件系统基本信息2.2 介绍2.3 创建文件夹2.4 查看指定文件夹下的内容2.5 上传文件到HDFS2.6 查看HDFS文件内容2.7 下载HDFS文件2.8 HDFS数据删除操作 3 HDFS客户端-jetbrians产品插件3.1 Big Data Tools 安装3.2 配置windows…...
生活小记-挂号信
"挂号信"通常指的是在邮寄过程中通过挂号邮寄服务寄送的信件,相对于普通信件有一些特殊的特点和服务。以下是挂号信与其他信件(例如普通信件)之间的区别: 跟踪和确认: 挂号信:通过挂号邮寄服务寄…...
3D点云处理:基于PCA的计算点云位姿(占位待整理)
文章目录 文章目录:3D视觉个人学习目录微信:dhlddxB站: Non-Stop_...

本地私有仓库、harbor私有仓库部署与管理
本地私有仓库、harbor私有仓库部署与管理 一、本地私有仓库1.本地私有仓库简介2.搭建本地私有仓库3.容器重启策略介绍 二、harbor私有仓库部署与管理1.什么是harbor2.Harbor的特性3.Harbor的构成4.harbor部署及配置5.客户端测试 三、Harbor维护1.创建2.普通用户操作私有仓库3.日…...

尚硅谷SpringMVC (5-8)
五、域对象共享数据 1、使用ServletAPI向request域对象共享数据 首页: Controller public class TestController {RequestMapping("/")public String index(){return "index";} } <!DOCTYPE html> <html lang"en" xmln…...
jupyter notebook中查看python版本的解决方案
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...
动态字符串 String (完整源码)
C自学精简教程 目录(必读) C数据结构与算法实现(目录) 本文的实现基本上和 动态数组 vector 是一样的。 因为大部分接口都一样。 所以,本文就直接给出全部的源码和运行结果。 //------下面的代码是用来测试你的代码有没有问题的辅助代码…...
【深度学习】实验05 构造神经网络示例
文章目录 构造神经网络1. 导入相关库2. 定义一个层3. 构造数据集4. 定义基本模型5. 变量初始化6. 开始训练 构造神经网络 注明:该代码用来训练一个神经网络,网络拟合y x^2-0.5noise,该神经网络的结构是输入层为一个神经元,隐藏层…...

用了这么久SpringBoot却还不知道的一个小技巧
前言 你可能调第三方接口喜欢启动application,修改,再启动,再修改,顺便还有个不喜欢写JUnitTest的习惯。 你可能有一天想要在SpringBoot启动后,立马想要干一些事情,现在没有可能是你还没遇到。 那么SpringB…...

Websocket、SessionCookie、前端基础知识
目录 1.Websocket Websocket与HTTP的介绍 不同使用场景 Websocket链接过程 2.Session&Cookie Cookie的工作原理 Session的工作原理 区别 3.前端基础知识 1.Websocket Websocket与HTTP的介绍 HTTP: 1.HTTP是单向的,客户端发送请求࿰…...

【云原生进阶之PaaS中间件】第一章Redis-2.4缓存更新机制
1 缓存和数据库的数据一致性分析 1.1 Redis 中如何保证缓存和数据库双写时的数据一致性? 无论先操作db还是cache,都会有各自的问题,根本原因是cache和db的更新不是一个原子操作,因此总会有不一致的问题。想要彻底解决这种问题必须…...
Qt——事件处理详解
Qt事件处理 一、事件基础 事件是Qt应用程序中的基本构建块,它们代表了一些特定的行为或状态变化。事件可以是鼠标点击、键盘输入、窗口大小改变、定时器事件等。每个事件都是一个对象,继承自QEvent类。 二、事件常见类型 Qt中的事件分为多种类型&…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...