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

34.SpringMVC获取请求参数

SpringMVC获取请求参数

通过ServletAPI获取

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

index.html

    <form th:action="@{/test/param}" method="post">用户名:<input type="text" name="username">密码:<input type="password" name="password"><input type="submit" value="提交"></form>

TestParamController.java

package com.atguigu.SpringMVC.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;@Controller
public class TestParamController {@RequestMapping("/test/param")public String getParamByServletAPI(HttpServletRequest request){String username = request.getParameter("username");String password = request.getParameter("password");System.out.println("username为:"+username+",password为:"+password);return "success";}
}

成功获取到表单提交的信息,这是采用原生Servlet的方式获取

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

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

index.html

    <form th:action="@{/testParam}" method="post">用户名:<input type="text" name="username">密码:<input type="password" name="password"><input type="submit" value="提交"></form>

TestParamController.java

    @RequestMapping("/testParam")public String getParam(//@RequestParam注解以键值对的方式获取到值并赋值给变量@RequestParam("username") String name,//自动匹配String password){System.out.println("username为:"+name+",password为:"+password);return "success";}

成功获取到表单提交的信息(可以省略@RequestParam注解,SpringMVC匹配到请求映射时就会自动为参数赋值)

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

  • value:指定为形参赋值的请求参数的参数名
  • required:设置是否必须传输此请求参数,默认值为true,表示当前请求必须传输value所指定的请求参数(只要有请求参数即可,值为空都没问题),若没有传输该请求参数,且没有设置defaultValue属性则会报错:400:Required String parameter 'xxx' is not present,为false时没有获取到请求参数时值为null
  • defaultValue:不管required属性值为true或false,当value所指定的请求参数没有传输或传输的值为""时,则使用默认值为形参赋值

@RequestHeader:将请求头信息控制器方法的形参创建映射关系,属性和用法同@RequestParam

  • 获取来源信息:@RequestHeader("referer") String referer
    • 输出结果:http://localhost:8080/SpringMVC/

@CookieValue:将cookie数据控制器方法的形参创建映射关系,属性和用法同@RequestParam,因为session里面存储的数据就是cookie的形式,所以获取session对象之后就有cookie数据了

  • 获取cookie的JSESSIONID信息:

    • 			xxx(HttpServletRequest request,@CookieValue("JSESSIONID") String jsessionId)
			HttpSession session = request.getSession();//获取session对象即可System.out.println(jsessionId);
  • 输出结果:B096EFFCB054BC496DCD805203C49690

通过POJO获取请求参数

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

index.html

    <!--根据映射匹配,get方式和post方式都可以匹配成功--><form th:action="@{/testPOJO}">ID:<input type="text" name="id">用户名:<input type="text" name="username">密码:<input type="password" name="password">年龄:<input type="text" name="age">成绩:<input type="text" name="gender">邮箱:<input type="email" name="email"><input type="submit" value="提交"></form>

TestPOJOController.java

    @RequestMapping("/testPOJO")public String testPOJO(User user){System.out.println(user);//User{id=6, username='yxx', password='123', age=18, gender='97', email='156899@qq.com'}return "success";}

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

在JavaWeb中解决乱码问题采用request.setCharacterEncoding("UTF-8")的语句解决,在SpringMVC中因为会在访问地址对应方法之前就自动获取了请求参数,而上述语句需要在获取前设置才有效,为了解决获取请求参数的乱码问题,可以使用SpringMVC提供的编码过滤器CharacterEncodingFilter,使用前必须在web.xml中先进行注册

Tomcat8及以上对于以get方式提交表单的表单信息获取参数默认为UTF-8的编码方式,只有post方式需要设置,而Tomcat7两种方式都要设置

web.xml

	<!--配置springMVC的编码过滤器--><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>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前,否则无效,且由于配置是全局生效,无论get还是post方式都不会再乱码

相关文章:

34.SpringMVC获取请求参数

SpringMVC获取请求参数 通过ServletAPI获取 将HttpServletRequest作为控制器方法的形参&#xff0c;此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象 index.html <form th:action"{/test/param}" method"post">用户名&#…...

TC1016-同星4路CAN(FD),2路LIN转USB接口卡

TC1016是同星智能推出的一款多通道CAN&#xff08;FD&#xff09;和LIN总线接口设备&#xff0c;CANFD总线速率最高支持8M bps&#xff0c;LIN支持速率0~20K bps&#xff0c;产品采用高速USB2.0接口与PC连接&#xff0c;Windows系统免驱设计使得设备具备极佳的系统兼容性。 支…...

Android源码——从Looper看ThreadLocal

1 概述 ThreadLocal用于在当前线程中存储数据&#xff0c;由于存储的数据只能在当前线程内使用&#xff0c;所以自然是线程安全的。 Handler体系中&#xff0c;Looper只会存在一个实例&#xff0c;且只在当前线程使用&#xff0c;所以使用ThreadLocal进行存储。 2 存储原理 …...

16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及JDBC示例(4)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

MySQL 自定义 split 存储过程

MySQL 没有提供 split 函数&#xff0c;但可以自己建立一个存储过程&#xff0c;将具有固定分隔符的字符串转成多行。之所以不能使用自定义函数实现此功能&#xff0c;是因为 MySQL 的自定义函数自能返回标量值&#xff0c;不能返回多行结果集。 MySQL 8&#xff1a; drop pr…...

专题-【十字链表】

有向图的十字链表表示法&#xff1a;...

微信小程序教学系列(2)

第二章&#xff1a;小程序开发基础 1. 小程序页面布局与样式 在小程序开发中&#xff0c;我们可以使用 WXML&#xff08;WeiXin Markup Language&#xff09;和 WXSS&#xff08;WeiXin Style Sheet&#xff09;来定义页面的布局和样式。 1.1 WXML基础 WXML 是一种类似于 H…...

社科院与美国杜兰大学金融管理硕士项目——畅游于金融世界

随着社会经济的不断发展&#xff0c;职场竞争愈发激烈&#xff0c;很多同学都打算通过报考研究生来实现深造&#xff0c;提升自己的综合能力和竞争优势&#xff0c;获得优质的证书。而对于金融专业的学生和在职人员来说&#xff0c;社科院与美国杜兰大学金融管理硕士项目是一个…...

功能强大、超低功耗的STM32WL55JCI7、STM32WL55CCU7、STM32WL55CCU6 32位无线远距离MCU

STM32WL55xx 32位无线远距离MCU嵌入了功能强大、超低功耗、符合LPWAN标准的无线电解决方案&#xff0c;可提供LoRa、(G)FSK、(G)MSK和BPSK等各种调制。STM32WL55xx无线MCU的功耗超低&#xff0c;基于高性能Arm Cortex-M4 32位RISC内核&#xff08;工作频率高达48MHz&#xff09…...

【自适应稀疏度量方法和RQAM】疏度测量、RQAM特征、AWSPT和基于AWSPT的稀疏度测量研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

sql递归查询

一、postgresql 递归sql with recursive p as(select t1.* from t_org_test t1 where t1.id2union allselect t2.*from t_org_test t2 join p on t2.parent_idp.id) select id,name,parent_id from p; sql中with xxxx as () 是对一个查询子句做别名&#xff0c;同时数据库会对…...

常见前端面试之VUE面试题汇总三

7. Vue 中封装的数组方法有哪些&#xff0c;其如何实现页面更新 在 Vue 中&#xff0c;对响应式处理利用的是 Object.defineProperty 对数据进 行拦截&#xff0c;而这个方法并不能监听到数组内部变化&#xff0c;数组长度变化&#xff0c;数 组的截取变化等&#xff0c;所以需…...

Three.js 实现模型材质分解,拆分,拆解效果

原理&#xff1a;通过修改模型材质的 x,y,z 轴坐标 positon.set( x,y,z) 来实现拆解&#xff0c;分解的效果。 注意&#xff1a;支持模型材质position 修改的材质类型为 type“Mesh” ,其他类型的材质修改了position 可能没有实际效果 在上一篇 Three.js加载外部glb,fbx,gltf…...

《JVM修仙之路》初入JVM世界

《JVM修仙之路》初入JVM世界 博主目前正在学习JVM的相关知识&#xff0c;想以一种不同的方式记录下&#xff0c;娱乐一下 清晨&#xff0c;你睁开双眼&#xff0c;看到刺眼的阳光&#xff0c;你第一反应就是完了完了&#xff0c;又要迟到了。刚准备起床穿衣的你突然意识到不对&…...

苍穹外卖 day1 搭建成功环境

引入 idea找不到打包生成的文件目录怎么办&#xff0c;首先点击这个小齿轮 show ecluded files然后就能找到隐藏的文件 这个jar包内含tomcat&#xff0c;可以直接丢在linux上用 开发环境&#xff1a;开发人员在开发阶段使用的环境&#xff0c;一般外部用户无法访问 测试环…...

智能主体按照功能划分

(1) 构件接口主体 构件接口主体提供构件与用户之间的接口。当一个用户通过代理主体向 元组空间提出申请&#xff0c;并找到相匹配的构件主体时&#xff0c;此构件主体会将其所在构件主体 组中的构件接口主体通过申请用户的代理主体传送到用户的界面。 (2) 构件主体 通过构…...

python中的matplotlib画折线图(数据分析与可视化)

先导包&#xff08;必须安装了numpy 、pandas 和matplotlib才能导包&#xff09;&#xff1a; import numpy as np import pandas as pd import matplotlib.pyplot as plt核心代码&#xff1a; import numpy as np import pandas as pd import matplotlib.pyplot as pltpd.se…...

大数据数据仓库

一.在线教育 1.数据采集 1.数仓概念 数据仓库是为企业制定决策&#xff0c;提供数据支持的。数据采集和存储、对数据进行计算和分析 2.项目架构 2.数据分类 业务数据 用户行为数据 爬虫数据 2.离线数仓 3.实时数仓...

Java“牵手“速卖通商品详情页面数据获取方法,速卖通API实现批量商品数据抓取示例

速卖通商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取速卖通商品详情数据&#xff0c;您可以通过开放平台的接口或者直接访问速卖通商城的网页来获取商品详情信息。以下是两种常用方法的介绍&#xff1a;…...

【Git】代码误推送还原(真实项目环境,非纸上谈兵)

背景 RT&#xff0c; 我今天眼睛花了&#xff0c;不小心把工作分支【合并】到了一个不相干的功能分支上&#xff0c;并且代码已经推送到远程仓库了。于是&#xff0c;只能尝试还原到上一次提交中。 【合并】分支有一个点我们是不可避免的&#xff0c;文字很难描述&#xff0c;…...

CPU 飙升?这3大场景助你精准定位

1 常用的 Load 分析方法 CPU高、Load高 通过 top 命令查找占用CPU最高的进程PID&#xff1b; 通过top -Hp PID查找占用CPU最高的线程TID; 对于java程序&#xff0c;使用jstack打印线程堆栈信息&#xff1b; 通过printf %x tid打印出最消耗CPU线程的十六进制&#xff1b; …...

6、Spring_Junit与JdbcTemplate整合

Spring 整合 1.Spring 整合 Junit 1.1新建项目结构 1.2导入依赖 导入 junit 与 Spring 依赖 <!-- 添加 spring 依赖--> <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version…...

Redis是如何保证高可用的?

Redis这种基于内存的关系型数据库我们在选用的时候就是考虑到它的快。而且可以很方便的实现诸如分布式锁、消息队列等功能。 笔者在前一段秋招面试的时候就被提问&#xff0c;“Redis是怎么保证高可用的&#xff1f;” 后续的子问题包含&#xff0c;集群模式是怎么实现的&…...

精益求精:通付盾安卓应用加固升级,为移动安全保驾护航!

在如今竞争激烈的移动应用领域&#xff0c;保障应用资源的安全性成为刻不容缓的任务。最近&#xff0c;通付盾针对资源加密方案进行了全面升级&#xff0c;大幅增强了其兼容性&#xff0c;实现了更全面的资源文件类型保护。这次升级为移动应用的安全性和稳定性迈出了坚实的一步…...

javaweb01-html、css基础

话不多说&#xff0c;先来一张泳装板鸭镇楼 接上一开篇&#xff0c; 首战以web的三大基石开头&#xff08;html、css、js&#xff09;&#xff0c;js内容比较多&#xff0c;下一序章讲解&#xff0c;这一章节主要以html和css为主。 目录 一、初始web前端 二、HTML标签结构 三、…...

牛客复盘] 2023河南萌新联赛第(七)场:信息工程大学 B\I 20230823

牛客复盘] 2023河南萌新联赛第&#xff08;七&#xff09;场&#xff1a;信息工程大学 B\I 20230823 总结B 七夕1. 题目描述2. 思路分析3. 代码实现 I 细胞分裂1. 题目描述2. 思路分析3. 代码实现 六、参考链接 总结 场外OB做了B和I题&#xff0c;只能说这场有点离谱。B 并查…...

使用PyMuPDF添加PDF水印

使用Python添加PDF水印的博客文章。 C:\pythoncode\new\pdfwatermark.py 使用Python在PDF中添加水印 在日常工作中&#xff0c;我们经常需要对PDF文件进行处理。其中一项常见的需求是向PDF文件添加水印&#xff0c;以保护文件的版权或标识文件的来源。本文将介绍如何使用Py…...

window如何实时刷新日志文件

1 安装windows git 下载地址&#xff1a;Git - Downloading Package (git-scm.com) 2 打开git bash 输入tail.exe -f 日志文件路径...

动态代理的两个使用方式(手动实现+SpringAOP实现)-Demo

一、手动实现 1、具体代码 package com.xch.proxy;/*** 具体业务接口** author XuChenghe* date 2023/8/18 15:09*/ public interface Star {/*** 唱歌方法** param name* return*/String sing(String name);/*** 跳舞方法*/void dance();} package com.xch.proxy;/*** 具体…...

面试话术(MQ+mybatis+nginx+redis+ssm+mysql+linux)

面试话术 RabbitMq1、介绍一下rabbitmq2、如何保证消息确定消息发送成功&#xff0c;并且被消费成功&#xff0c;有什么保障措施3、如何保证消息不被重复消费4、RabbitMQ 宕机了怎么处理 授权话术1、你给我说一下授权认证&#xff08;登陆注册&#xff09;的逻辑2、说一下jwt3、…...

网站建设检查/seo网络推广

Android电商开发&#xff08;1&#xff09;项目基础骨架 本次项目旨在完成一个二手书交易市场的一种校园app&#xff0c;可以方便同学们进行二手书交易&#xff0c;实现多次利用。 骨架采用多个model组合而成&#xff0c;包括以下部分组成&#xff1a; 注解model&#xff1a;提…...

网站打开显示建设中/2024年重大政治时事汇总

1&#xff0c;C中内存申请有哪些&#xff08;标准库函数&#xff09; 函数名 函数原型作用例子二维数组的申请&#xff0c;释放mallocvoid * malloc&#xff08;size_t size&#xff09; 动态内存的申请 函数本身不知内存类型&#xff0c;关心内存的总字节数 int * p &#xff…...

沈阳开发网站公司/域名购买平台

1、场景&#xff1a;当一个查询需要多个排序规则时怎么做&#xff1f; 2、desc 降序&#xff0c;asc 升序&#xff0c;默认升序 3、select * from t_test oreder by createtime ,cuorder desc 查询结果&#xff1a;首先时间排序优先&#xff0c;默认升序&#xff0c;然后按照cu…...

石家庄网站建设公司哪家好/绍兴seo计费管理

利用 这个工具 用这个工具, 使用socks5或者http 都可以转发到抓包工具上 安装好postern后&#xff0c;在左侧菜单点配置代理&#xff0c;添加代理服务器&#xff0c;服务器名称随意&#xff0c;地址跟端头填抓包工具的宿主机ip及抓包工具开启的端口&#xff0c;代理类型一般是…...

东莞企业网站建设营销/新媒体运营

1月6日&#xff0c;物理学院量子传感与量子信息实验室蔡建明教授团队以“Dynamic framework for criticality-enhanced quantum sensing”为题在《物理评论快报》&#xff08;Physical Review Letters&#xff09;发表研究论文[2]&#xff0c;提出一种量子临界动力学增强的量子…...

用asp做网站/torrentkitty磁力猫

本文原创&#xff0c;转载请注明&#xff1a;http://www.cnblogs.com/fengzheng/p/5889312.html 为什么要有mybatis mybatis 是一个 Java 的 ORM 框架&#xff0c;ORM 的出现就是为了简化开发。最初的开发方式是业务逻辑和数据库查询逻辑是分开的&#xff0c;或者在程序中编写…...