Servlet的request对象
request对象的继承关系
1.HttpServletRequest接口继承了ServletRequest接口,对其父接口进行了扩展,可以处理满足所有http协议的请求
2.HttpServletRequest和ServletRequest都是接口,不能创建对象,因此在tomcat底层定义实现类并创建实现类对象
public class RequestFacade implements HttpServletRequest{}
tomcat底层创建门面类RequestFacade对象
ServletRequest request=new RequestFacade();多态
request对象的API方法
获取请求行
String getMethod()
Get the request method, e.g. GET, POST, etc.
获取请求方法
public String getContextPath()
访问虚拟目录(项目访问路径)就是我们在Tomcat配置的位置设置的路径,是虚拟的,就是随便定义的 如果设置虚拟路径位置是/ 那么该方法获取的内容是空字符串
public StringBuffer getRequestURL()
返回的 URL 包含一个协议、服务器名称、端口号、服务器路径,但是不包含查询字符串参数(获取的是请求资源的绝对路径,包含三要素(IP协议,IP地址,端口号)),没有请求参数
public String getRequestURI()
获取的是请求资源的绝对路径,但是不包含三要素,没有请求参数
public String getQueryString()
返回包含在请求 URL 中路径后面的查询字符串。如果 URL 没有查询字符串,则此方法返回
null
。只能获取GET请求的请求参数(因为get请求的请求参数在URL后面)
测试
浏览器页面
@WebServlet("/requestDemo1") public class requestDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取请求方法String method = request.getMethod();System.out.println(method);//GET//访问虚拟目录String contextPath = request.getContextPath();System.out.println(contextPath);//如果是/ 则为空字符串//获取URL路径(资源的URL路径,包含三要素)StringBuffer requestURL = request.getRequestURL();//StringBufffer和StringBuilder都是字符串缓冲区 ,字符可以改变//StringBuilder线程不安全,效率高//StringBuffer线程安全,效率低String rs = requestURL.toString();System.out.println(rs);//http://localhost:8080/requestDemo1//获取URI路径(不包含三要素的URL路径)String requestURI = request.getRequestURI();System.out.println(requestURI);///requestDemo1//获取请求参数(GET方式适用)String queryString = request.getQueryString();System.out.println(queryString);//username=aa&pwd=bb}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);} }
获取请求头
public String getHeader(String name)
以
String
的形式返回指定请求头的值。如果该请求不包含指定名称的头,则此方法返回null
。如果有多个具有相同名称的头,则此方法返回请求中的第一个头。头名称是不区分大小写的。可以将此方法与任何请求头一起使用。
name 指定头名称的 String
return 包含请求头的值的 String
,如果该请求没有该名称的头,则返回null
name就是冒号左边的标识
获取请求体(POST请求)
public ServletInputStream getInputStream()
获取字节和字符数据
public java.io.BufferedReader getReader()
获取字符数据
前端页面
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body> <h2>POST请求</h2> <form action="/requestDemo2" method="post"><input type="text" name="username"/> <br><input type="text" name="password"/> <br><input type="submit" value="提交"> <br> </form> </body> </html>
@WebServlet("/requestDemo2") public class RequestDemo2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.获取输入流对象BufferedReader reader = request.getReader();String line=null;while((line=reader.readLine())!=null){System.out.println(line);//username=hhhh&password=123456}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);} }
浏览器:
获取请求参数的通用方式
get请求是getQueryString()方法
post请求是getReader(),getInputStream()
目录
request对象的继承关系
request对象的API方法
获取请求行
String getMethod()
public String getContextPath()
public StringBuffer getRequestURL()
public String getRequestURI()
public String getQueryString()
获取请求头
public String getHeader(String name)
获取请求体(POST请求)
public ServletInputStream getInputStream()
public java.io.BufferedReader getReader()
获取请求参数的通用方式
public java.util.MapgetParameterMap(),>
String[] getParameterValues(String name)
String getParameter(String name)
通用方法
public java.util.Map<String, String[]>getParameterMap()
获取所有请求参数的map集合
String[] getParameterValues(String name)
根据参数名字获取参数值(数组)
name是前端请求参数的等号左边的key
String getParameter(String name)
根据参数名字获取参数值(单个值)
注意:如果参数name有多个值,取第一个
前端
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><form action="/requestDemo3" method="post">用户:<input type="text" name="username"> <br>密码:<input type="password" name="pwd"> <br>爱好:<input type="checkbox" name="hoppy" value="1">爬山<input type="checkbox" name="hoppy" value="2">游泳<br><input type="submit" value="提交"></form></body> </html>
@WebServlet("/requestDemo3") public class requestDemo3 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("前端提交数据的方式是"+request.getMethod());//获取所有请求参数的map对象Map<String, String[]> map = request.getParameterMap();map.forEach((key,value)-> System.out.println(key+"--->"+ Arrays.toString(value)));//获取指定name的参数值(数组)String[] usernames = request.getParameterValues("username");System.out.println(Arrays.toString(usernames));// //获取指定name的参数值(单个值)String hoppy = request.getParameter("pwd");System.out.println(hoppy);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);} }
浏览器
结果:
前端提交数据的方式是POST
username--->[hhhh]
pwd--->[aa]
hoppy--->[1, 2]
[hhhh]
aa
POST请求 如果输入的值有中文就会出现乱码的问题
前端提交数据的方式是POST
username--->[?????????]
pwd--->[qqq]
hoppy--->[1, 2]
[?????????]
qqq
解决方法
//方法一://使用request对象调用方法request.setCharacterEncoding("UTF-8");//告知tomcat使用UTF-8进行解码//注意:解决请求体数据的乱码(解决POST乱码的)//方法二://使用javase的API方法String username = request.getParameter("username");username = URLEncoder.encode(username, "ISO-8859-1");//编码username = URLDecoder.decode(username,"UTF-8");//解码System.out.println(username);//方法三://使用javase的API解决即String类byte[] bytes = username.getBytes("ISO-8859-1");//编码String s = new String(bytes,"UTF-8");//解码System.out.println(s);
相关文章:

Servlet的request对象
request对象的继承关系 1.HttpServletRequest接口继承了ServletRequest接口,对其父接口进行了扩展,可以处理满足所有http协议的请求 2.HttpServletRequest和ServletRequest都是接口,不能创建对象,因此在tomcat底层定义实现类并创…...
蓝桥杯-合并数列
小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案,分别将它们列为两个数组 {a1, a2, …, an} 和 {b1, b2, …, bm}。两个数组的和相同。 定义一次合并操作可以将某数组内相邻的两个数合并为一个新数,新数的值是原来两…...
《web应用技术》第9次课后作业
一、将前面的代码继续完善功能 1、采用XML映射文件的形式来映射sql语句; 2、采用动态sql语句的方式,实现条件查询的分页。 二、学习git的使用。 1、每个小组将自己的项目上传到gitee,学会协作开发; 2、学会从gitee上拉取项目…...

FRAUDARCatchSync算法简介
参考:https://blog.51cto.com/u_15127663/2778705 1. 背景 Fraudar 要解决的问题是:找出社交网络中最善于伪装的虚假用户簇。虚假用户会通过增加和正常用户的联系来进行伪装,而这些伪装(边)会形成一个很密集的子网络,可以通过定义…...

刷题之将有序数组转换成二叉搜索树(leetcode)
将有序数组转换成二叉搜索树 正常递归,中序遍历 递归经常会把自己绕晕,还是得画图分析 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(null…...
K-means聚类模型教程(个人总结版)
K-means聚类是一种广泛应用于数据挖掘和数据分析的无监督学习算法。它通过将数据点分成K个簇(cluster),使得同一簇内的数据点之间的相似度最大,不同簇之间的相似度最小。本文将详细介绍K-means聚类算法的背景、基本原理、具体实现…...
android怎么告诉系统不要回收
在Android中,如果你想告诉系统不要回收你的应用程序,可以通过设置Activity的属性来实现。你可以设置android:configChanges属性,指定在哪些配置更改时不重新创建Activity。 例如,如果你想指示系统在屏幕方向更改时不要重新创建Ac…...
【FAQ】HarmonyOS SDK 闭源开放能力 —IAP Kit(2)
1.问题描述: 应用内支付IAP Kit和Payment Kit的区别以及适用场景? 解决方案: IAP Kit是四方支付,仅支持在线虚拟商品,如会员,游戏钻石等,双框架支持全球,目前单框架暂时只支持国内…...

ubuntu设置root开机登录,允许root用户ssh远程登录
ubuntu与centos系统不同,默认root开机不能登录。 1、输入一下命令创建root密码,根据提示输入新密码 sudo passwd root 2、打开gdm-autologin文件,将auth required pam_succeed_if.so user ! root quiet_success这行注释掉,这行就…...
Web测试面试题(二)
一:简述HTTP协议的状态码包含哪些? 2XX,表示成功 3XX,表示重定向 4XX,表示客户端错误 5XX,表示服务器错误 二:HTTP和HTTPS的区别? 《1》安全性上的区别: HTTPS&#x…...
VBA宏指令写的方法突然不能用了
背景:项目组有个自动化测试项目,实在excel中利用VBA开发的;时间比较久远,我前面的哥们走后,这个软件一直在用,最近系统不知道是不是更新的缘故;有些代码除了问题; 先上源码: Dim Conn As Object, Rst As Object Dim sqlStr$ Dim str_start_SN$, str2$ str_start_SN …...
第13章 Python建模库介绍
以下内容参考自https://github.com/iamseancheney/python_for_data_analysis_2nd_chinese_version/blob/master/%E7%AC%AC05%E7%AB%A0%20pandas%E5%85%A5%E9%97%A8.md 《利用Python进行数据分析第2版》 用以学习和记录。 本书中,我已经介绍了Python数据分析的编程基…...

IP学习——ospf1
OSPF:开放式最短路径优先协议 无类别IGP协议:链路状态型。基于 LSA收敛,故更新量较大,为在中大型网络正常工作,需要进行结构化的部署---区域划分、ip地址规划 支持等开销负载均衡 组播更新 ---224.0.0.5 224.0.0.6 …...

别说废话!说话说到点上,项目高效沟通的底层逻辑揭秘
假设你下周要在领导和同事面前汇报项目进度,你会怎么做?很多人可能会去网上搜一个项目介绍模板,然后按照模板来填充内容。最后,汇报幻灯片做了 80 页,自己觉得非常充实,但是却被领导痛批了一顿。 这样的境…...
前后端编程语言和运行环境的理解
我已重新检查了我的回答,并确保信息的准确性。以下是常用的编程语言,以及它们通常用于前端或后端开发,以及相应的框架和运行环境: 前端开发 JavaScript 框架:React, Angular, Vue.js, Ember.js, Backbone.js运行环境:Web 浏览器HTML (HyperText Markup Language) 不是编…...

一顿五元钱的午餐
在郑州喧嚣的城市一隅,藏着一段鲜为人知的真实的故事。 故事的主角是一位年过半百的父亲,一位平凡而又伟大的劳动者。岁月在他脸上刻下了深深的痕迹,但他眼神中闪烁着不屈与坚韧。 他今年52岁,为了给远在家乡的孩子们一个更好的…...
【前端每日基础】day60——TDK三大标签及SEO引擎优化
TDK 是指 Title(标题)、Description(描述)、Keywords(关键词)这三个网页的重要元信息标签,对于 SEO(搜索引擎优化)至关重要。下面是它们的作用和 SEO 优化建议࿱…...

vscode添加代办相关插件,提高开发效率
这里写目录标题 前言插件添加添加TODO Highlight安装TODO Highlight在项目中自定义需要高亮显示的关键字 TODO Tree安装TODO Tree插件 单行注释快捷键 前言 在前端开发中,我们经常会遇到一些未完成、有问题或需要修复的部分,但又暂时未完成或未确定如何处…...

JS对象超细
目录 一、对象是什么 1.对象声明语法 2.对象有属性和方法组成 二、对象的使用 1.对象的使用 (1)查 (2)改 (3)增 (4)删(了解) (5…...

远程PLC、工控设备异地调试,贝锐蒲公英异地组网方案简单高效
北京宇东宁科技有限公司专门提供非标机电设备,能够用于金属制品的加工制造。设备主要采用西门子的PLC作为控制系统,同时能够连接上位机用于产量、温度、压力、电机运行数据的监控,以及工厂的大屏呈现需求。目前,客户主要是市场上的…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...

如何把工业通信协议转换成http websocket
1.现状 工业通信协议多数工作在边缘设备上,比如:PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发,当设备上用的是modbus从站时,采集设备数据需要开发modbus主站;当设备上用的是西门子PN协议时…...

【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法
使用 ROS1-Noetic 和 mavros v1.20.1, 携带经纬度海拔的话题主要有三个: /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码,来分析他们的发布过程。发现前两个话题都对应了同一…...