SpringMVC-获取请求参数

简介

用户输入信息后,如果想要得到用户输入的内容 , springMVC 应该如何做呢?

本次课讲解下再springmvc中获取请求参数及中文乱码问题

通过servletAPI获取

讲HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象

 <a th:href="@{/testAPI(uname='admin',pwd=1234)}">测试使用servletapi 获取请求参数</a>
 @RequestMapping("/testAPI")//形参位置的req表示当前请求public String testParam1(HttpServletRequest req){​String name = req.getParameter("uname");String pwd = req.getParameter("pwd");System.out.println(name+"-----"+pwd);return "hello";}

通过控制器方法的形参获取请求参数

在控制器方法的形参位置,设置和请求参数同名的形参,当浏览器发送请求,匹配到请求映射时,在DispacherServlet中就会将请求参数赋值给相应的形参

 <a th:href="@{/test2(uname='admin2',pwd=12342222)}">测试使用 控制器 获取请求参数</a>
 @RequestMapping("/test2")public String testParam2(String uname,String pwd){​System.out.println(uname+"-----"+pwd);return "hello";}

 
<form th:action="@{/test2}" method="post">用户名: <input name="uname" type="text"/><br>密码: <input name="pwd" type="password"/><br>爱好:<input name="hobby" type="checkbox" value="a"/> 打游戏<input name="hobby" type="checkbox" value="b"/> 追剧<input name="hobby" type="checkbox" value="c"/> 睡觉<input name="hobby" type="checkbox" value="d"/> 旅行  <br><input type="submit" value="submit"/></form>
 @RequestMapping("/test2")public String testParam2(String uname,String pwd,String[] hobby){//若请求参数中出现多个同名的请求参数,可以在控制器方法的形参位置设置字符串类型或字符串数组类型来接收此请求参数//若使用字符串类型的形参,最终结果为请求参数的每一个值,每一个值直接使用逗号拼接System.out.println(uname+"-----"+pwd+"---"+ Arrays.toString(hobby));return "hello";}

注意:

若请求参数中出现多个同名的请求参数,可以在控制器方法的形参位置设置字符串类型或字符串数组类型来接收此请求参数

若使用字符串类型的形参,最终结果为请求参数的每一个值,每一个值直接使用逗号拼接

@RequestParam

@RequestParam是将请求参数和控制器方法的形参创建映射关系

@RequestParam注解一共有3个属性:

value: 指定为形参赋值的请求参数的参数名

required: 设置是否必须传输此请求参数, 默认值为 true

若设置为true时, 则当前请求必须传输value所指定的请求参数,若没有传输该请求参数,且没有设置defaultValue属性,则页面报错400:Required parameter 'XXX' is not present , 若设置为false, 则当前请求不是必须传输value所指定的请求参数, 若没有传输,则 注解所标识的形参的值为null

defaultValue:不管required属性值为true或false,当value所指定的请求参数没有传输时则使用默认值为形参赋值

 <form th:action="@{/test2}" method="post">用户名: <input name="username" type="text"/><br>密码: <input name="pwd" type="password"/><br>爱好:<input name="hobby" type="checkbox" value="a"/> 打游戏<input name="hobby" type="checkbox" value="b"/> 追剧<input name="hobby" type="checkbox" value="c"/> 睡觉<input name="hobby" type="checkbox" value="d"/> 旅行  <br><input type="submit" value="submit"/></form>
 @RequestMapping("/test2")public String testParam2(@RequestParam("username") String uname, String pwd, String[] hobby){//若请求参数中出现多个同名的请求参数,可以在控制器方法的形参位置设置字符串类型或字符串数组类型来接收此请求参数//若使用字符串类型的形参,最终结果为请求参数的每一个值,每一个值直接使用逗号拼接System.out.println(uname+"-----"+pwd+"---"+ Arrays.toString(hobby));   ---- 正常获取 unamereturn "hello";}

若HTTP状态 400 - 错误的请求

则 报错: Required request parameter 'username' for method parameter type String is not present(存在)

若将 controller 修改为

 @RequestMapping("/test2")public String testParam2(@RequestParam(value = "username",required = false) String uname, String pwd, String[] hobby){//若请求参数中出现多个同名的请求参数,可以在控制器方法的形参位置设置字符串类型或字符串数组类型来接收此请求参数//若使用字符串类型的形参,最终结果为请求参数的每一个值,每一个值直接使用逗号拼接System.out.println(uname+"-----"+pwd+"---"+ Arrays.toString(hobby));return "hello";}

再次进行访问,则可以跳转页面, controller获取到的 uname 值为 null

 @RequestMapping("/test2")public String testParam2(@RequestParam(value = "username",required = false,defaultValue = "pppp") String uname, String pwd, String[] hobby){//若请求参数中出现多个同名的请求参数,可以在控制器方法的形参位置设置字符串类型或字符串数组类型来接收此请求参数//若使用字符串类型的形参,最终结果为请求参数的每一个值,每一个值直接使用逗号拼接System.out.println(uname+"-----"+pwd+"---"+ Arrays.toString(hobby));return "hello";}

再次访问测试请求参数, 此时 controller获得uname值为 pppp

在地址栏输入 测试请求参数,此时(username没有传值) controller获得uname值为 pppp

@RequestHeader

@RequestHeader 是将请求头信息和控制器方法的形参创建映射关系

@RequestHeader注解一共有3个属性 value,required,defaultValue 用法同@RequestParam

 @RequestMapping("/test2")public String testParam2(@RequestParam(value = "username",required = false,defaultValue = "pppp") String uname,String pwd, String[] hobby,@RequestHeader("Host")String host){//若请求参数中出现多个同名的请求参数,可以在控制器方法的形参位置设置字符串类型或字符串数组类型来接收此请求参数//若使用字符串类型的形参,最终结果为请求参数的每一个值,每一个值直接使用逗号拼接System.out.println(uname+"-----"+pwd+"---"+ Arrays.toString(hobby)+"----"+host);  // host-- localhost:8080return "hello";}

通过Pojo获取请求参数

可以在控制器方法的形参位置设置一个实体类类型的形参,此时 若浏览器传输的请求参数的参数名 和 实体类中的属性名一致, 那么请求参数就会为此属性赋值

 
package ly.entity;​public class User {private String username;private int age;private String pwd;private String sex;​@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", age=" + age +", pwd='" + pwd + '\'' +", sex='" + sex + '\'' +", email='" + email + '\'' +'}';}​private String email;​public String getUsername() {return username;}​public void setUsername(String username) {this.username = username;}​public int getAge() {return age;}​public void setAge(int age) {this.age = age;}​public String getPwd() {return pwd;}​public void setPwd(String pwd) {this.pwd = pwd;}​public String getSex() {return sex;}​public void setSex(String sex) {this.sex = sex;}​public String getEmail() {return email;}​public void setEmail(String email) {this.email = email;}}
 <form th:action="@{/testPojo}" method="post">用户名: <input name="username" type="text"/><br>密码: <input name="pwd" type="password"/><br>sex:<input name="sex" type="radio" value="男"/>男<input name="sex" type="radio" value="女"/>女<br>age: <input name="age" type="test" /> <br>邮箱: <input name="email" type="text" /> <br>​<input type="submit" value="submit"/></form>
 
@RequestMapping("/testPojo")public String testParam2(User user){System.out.println(user);return "hello";}

控制台输出:User{username='qwe', age=12, pwd='123', sex='???', email='12112@qq.com'} 发现问题: 中文乱码 ----- 字符编码不一致 就会出现 乱码

解决获取请求参数的乱码问题

解决获取请求参数的乱码问题, 可以使用 springmvc提供的编码过滤器CharacterEncodingFilter,但是必须在web.xml中进行注册

如果 表单的提交方式为 get 则 只需要修改tomcat所在的server.xml, 增加 URIEncoding="UTF-8" 即可

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />

如果表单的提交方式为 post 则 在web.xml 中 增加 过滤器 ,一般推荐过滤器写在 servlet之前

 <filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceResponseEncoding</param-name><param-value>true</param-value></init-param>​</filter>​<filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

User{username='李四', age=2, pwd='111', sex='女', email='222'} 乱码已经解决

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

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

相关文章

使用Vite创建vue3工程

介绍 使用Vite构建工具&#xff0c;创建Vue3工程 示例 第一步&#xff1a;执行创建项目的命令&#xff0c;study-front-vue3是项目名称 npm init vite-app study-front-vue3第二步&#xff1a;进入项目文件夹&#xff0c;执行命令&#xff0c;安装模块 cd study-front-vue…

使用qtquick调用python程序,pytorch

一. 内容简介 使用qtquick调用python程序 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3pytorch 安装pytorch(http://t.csdnimg.cn/GVP23) 2.4QT 5.14.1 新版QT6.4,&#xff0c;6.5在线安装经常失败&#xff0c;而5.9版本又无法编译64位程序&#xf…

程序员为什么不能一次把功能写好,是因为他不想吗

引言 交流一下为什么他做的功能这么多Bug 大家好&#xff0c;最近看到一个有趣的问题&#xff1a; 程序员为什么要不能一次性写好&#xff0c;需要一直改Bug&#xff1f; 在我看来&#xff0c;程序员也是人&#xff0c;并非机器。 拿这个问题去质问程序员&#xff0c;答案无…

Java学习,一文掌握Java之SpringBoot框架学习文集(3)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

【网络】网络层协议ARP和IP协议转发流程

目录 一、IP概述 1.1 IP简介 1.2 IP协议 二、IP地址与硬件地址 三、地址解析协议ARP 3.1 ARP协议简介 3.2 ARP工作流程 3.3 ARP的四种典型情况 四、IP协议的转发流 一、IP概述 1.1 IP简介 IP地址&#xff08;Internet Protocol Address&#xff09;是指互联网协议地址…

[VUE]1-创建vue工程

目录 基于脚手架创建前端工程 1、环境要求 2、操作过程 3、工程结构 4、启动前端服务 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&#xff0c…

如何写html邮件 —— 参考主流outook、gmail、qq邮箱渲染邮件过程

文章目录 ⭐前言⭐outlook渲染邮件⭐gmail邮箱渲染邮件⭐qq邮箱渲染邮件 ⭐编写html邮件&#x1f496;table表格的属性&#x1f496;文本&#x1f496;图片&#x1f496;按钮&#x1f496;背景图片 ⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于 …

云卷云舒:【实战篇】对象存储迁移

云卷云舒&#xff1a;【实战篇】MySQL迁移-CSDN博客 1. 简介 对象存储与块存储、文件存储并列为云计算三大存储模型。提供海量存储空间服务&#xff0c;具备快速的数据存取性能、高可靠和数据安全性&#xff0c;通过标准的RESTful API接口和丰富的SDK包来提供服务&#xff0c…

一篇文章带你了解Jenkins + K8s 部署的好处

在当今的软件开发和运维领域&#xff0c;Kubernetes&#xff08;K8s&#xff09;和 Jenkins 的组合已经成为了一种常见且强大的部署模式。本文将探讨 Jenkins K8s 部署的好处&#xff0c;以及它们如何协同工作以提高效率和可靠性。 一、自动化部署和持续集成/持续交付&#x…

3D模型UV展开原理

今年早些时候&#xff0c;我为 MAKE 杂志写了一篇教程&#xff0c;介绍如何制作视频游戏角色的毛绒动物。 该技术采用给定的角色 3D 模型及其纹理&#xff0c;并以编程方式生成缝纫图案。 虽然我已经编写了一般摘要并将源代码上传到 GitHub&#xff0c;但我在这里编写了对使这一…

Presto CLI学习

1. 序言 作为Presto的客户端之一&#xff0c;Presto CLI是一个基于终端的交互式shell&#xff0c;对应presto源码中的presto-cli模块 Presto CLI的本质是一个self-executing jar —— presto-cli-version-executable.jar&#xff0c;就像一个普通的UNIX可执行文件 因此&#…

olap/spark-tungsten:codegen

15721这一章没什么好说的&#xff0c;不再贴课程内容了。codegen和simd在工业界一般只会选一种实现。比如phothon之前用codegen&#xff0c;然后改成了向量化引擎。一般gen的都是weld IR/LLVM IR/当前语言&#xff0c;gen成C的也要检查是不是有本地预编译版本&#xff0c;要不没…

城市建设模拟游戏:鼠托邦 RATOPIA 中文免安装版

《鼠托邦》是一款由独立游戏开发团队Cassel Games开发的基地建设模拟游戏。在游戏中&#xff0c;玩家需要管理一个庞大的地下鼠国&#xff0c;打造理想中的“鼠托邦”。玩家可以化身为糖果派对游戏中的老鼠女王&#xff0c;带领老鼠民众建设城市、勘探地下领域以扩展生存空间。…

MySQL第一讲:MySQL知识体系详解(P6精通)

MySQL知识体系详解(P6精通) MySQL不论在实践还是面试中,都是频率最高的。本系列主要对MySQL知识体系梳理,将给大家构建JVM核心知识点全局知识体系,本文是MySQL第一讲,MySQL知识体系详解。 文章目录 MySQL知识体系详解(P6精通)1、MySQL学习建议1.1、为什么学习 MySQL?1.2、…

C 练习实例21

题目&#xff1a;猴子吃桃问题&#xff1a;猴子第一天摘下若干个桃子&#xff0c;当即吃了一半&#xff0c;还不瘾&#xff0c;又多吃了一个
第二天早上又将剩下的桃子吃掉一半&#xff0c;又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时&a…

Web前端-JavaScript(ES6)

文章目录 1.ES5数组新方法1.1 数组方法forEach遍历数组1.2 数组方法filter过滤数组1.3 数组方法some1.4 some和forEach和filter的区别1.5 find()1.6 findIndex()1.7 trim去除字符串两端的空格1.8 获取对象的属性名1.9 Object.defineProperty 2.ES6语法2.1 ES6概述2.2 为什么使用…

Git 提交类型前缀

Git 提交类型前缀是指在 Git 提交消息中用来描述代码更改类型的前缀。除了 feat 和 fix 之外&#xff0c;还有许多其他常见的 Git 提交类型前缀。以下是一些常见的前缀&#xff1a; docs&#xff1a;文档相关的更改&#xff0c;例如更新文档、添加注释等。 style&#xff1a;代…

C# List去除重复数据

List<int> listnew List<int>(){1,1,1,1}; listlist.Distinct.toList();//该语句执行完毕后&#xff0c;list仅有一个元素。

CTF数据分析题详解

目录 题目一(1.pcap) 题目二(2.pcap) 题目三(3.pcap) 题目四(4.pcap) CTF流量分析经典例题详解-CSDN博客 本文章涉及的所有题目附件下载地址&#xff1a; 链接&#xff1a; https://pan.baidu.com/s/18mWo5vn1zp_XbmcQrMOKRA 提取码&#xff1a;hrc4 声明&#xff1a;这里…

WorkPlus AI助理为企业提供智能客服的机器人解决方案

在数字化时代&#xff0c;企业面临着客户服务的重要挑战。AI客服机器人成为了提升客户体验和提高工作效率的关键工具。作为一款优秀的AI助理&#xff0c;WorkPlus AI助理以其智能化的特点和卓越的功能&#xff0c;为企业提供了全新的客服机器人解决方案。 为什么选择WorkPlus A…