Servlet的request对象

news2024/11/19 7:47:58

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 {
    @Override
    protected 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


    }

    @Override
    protected 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 {
    @Override
    protected 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
        }
    }

    @Override
    protected 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 {
    @Override
    protected 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);
    }

    @Override
    protected 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);

 

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

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

相关文章

Google Find My Device:科技守护,安心无忧

在数字化的时代&#xff0c;我们的生活与各种智能设备紧密相连。而 Google Find My Device 便是一款为我们提供安心保障的实用工具。 一、Find My Decice Netword的定义 谷歌的Find My Device Netword旨在通过利用Android设备的众包网络的力量&#xff0c;帮助用户安全的定位所…

考场作弊行为自动抓拍分析系统

考场作弊行为自动抓拍分析系统采用了AI神经网络和深度学习算法&#xff0c;考场作弊行为自动抓拍分析系统通过人形检测和骨架勾勒等技术&#xff0c;实时计算判断考生的异常动作行为。通过肢体动作识别技术&#xff0c;系统可以详细分析考生的头部和手部肢体动作&#xff0c;进…

【oracle004】oracle内置函数手册总结(已更新)

1.熟悉、梳理、总结下oracle相关知识体系。 2.日常研发过程中使用较少&#xff0c;随着时间的推移&#xff0c;很快就忘得一干二净&#xff0c;所以梳理总结下&#xff0c;以备日常使用参考 3.欢迎批评指正&#xff0c;跪谢一键三连&#xff01; 总结源文件资源下载地址&#x…

Google发布的CAT3D,在1分钟内,能够从任意数量的真实或生成的图像创建3D场景。

给定任意数量的输入图像&#xff0c;使用以这些图像为条件的多视图扩散模型来生成场景的新视图。生成的视图被输入到强大的 3D 重建管道&#xff0c;生成可以交互渲染的 3D 表示。总处理时间&#xff08;包括视图生成和 3D 重建&#xff09;仅需一分钟。 相关链接 论文&#x…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十一)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 18 节&#xff09; P18《17.ArkUI-状态管理Observed 和 ObjectLink》 第一件事&#xff1a;嵌套对象的类型上加上 Observed 装饰器…

晶体振荡器

一、晶振与晶体区别 晶振是有源晶振的简称&#xff0c;又叫振荡器&#xff0c;英文名称是oscillator&#xff0c;内部有时钟电路&#xff0c;只需供电便可产生振荡信号&#xff1b;晶体是无源晶振的简称&#xff0c;也叫谐振器&#xff0c;英文名称是crystal&#xff0c;是无极…

C++第三方库【JSON】— jsoncpp

目录 认识JSON jsoncpp库 安装&使用 认识jsoncpp Json::Value jsoncpp序列化 jsoncpp反序列化 认识JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;采用完全独立于编程语言的文本格式来存储和表示数据&#xff0c;常用于在客户端和服…

深度学习:手撕 RNN(1)-RNN 的直观认识

本文首次发表于知乎&#xff0c;欢迎关注作者。 1. RNN是什么 RNN&#xff08;Recurrent Neural Network&#xff09;存在很多变体&#xff0c;为了方便叙述和理解&#xff0c;本文选取一个基本的 RNN 结构进行说明&#xff0c;该结构与 pytorch 中的 RNN 函数&#xff08;[1]…

c语言:strcmp

strcmp函数是用于比较两个字符串的库函数&#xff0c;其功能是根据ASCII值逐一对两个字符串进行比较。 语法&#xff1a;strcmp(str1, str2) 返回值&#xff1a; 如果str1等于str2&#xff0c;则返回0。 如果str1小于str2&#xff0c;则返回负数&#xff08;具体值取决于C…

Go微服务: 日志系统ELK核心架构设计

微服务日志系统建设 1 &#xff09;为什么需要日志系统 业务发展越来越庞大&#xff0c;服务器越来越多各种访问日志&#xff0c;应用日志&#xff0c;错误日志量越来越多&#xff0c;无法管理开发人员排查问题&#xff0c;需要到服务器上查日志 2 &#xff09;Elastic Stack…

Vue从入门到实战 Day08~Day10

智慧商城项目 1. 项目演示 目标&#xff1a;查看项目效果&#xff0c;明确功能模块 -> 完整的电商购物流程 2. 项目收获 目标&#xff1a;明确做完本项目&#xff0c;能够收获哪些内容 3. 创建项目 目标&#xff1a;基于VueCli自定义创建项目架子 4. 调整初始化目录 目…

刷题之和为k的数组(leetcode)

和为k的数组 这个思路一直想不到&#xff0c;参考了官方答案&#xff0c;哈希表记录[0,i]的和 class Solution { public:int subarraySum(vector<int>& nums, int k) {int result0;unordered_map<int, int>map;int pre0;//前缀和&#xff08;前面的和&…

必应崩了?

目录 今天使用必应发现出现了不能搜索&#xff0c;弹出乱码的情况。 搜了一下&#xff0c;发现其他人也出现了同样的问题。 使用Edge浏览器的话&#xff0c;可以试着改一下DNS&#xff0c;有可能会恢复正常&#xff08;等官方修复了记得改回来&#xff09; 使用谷歌浏览器打开…

哪些AI写作软件好用,这三款强大的AI写作软件必知

在当今信息爆炸的时代&#xff0c;AI写作软件逐渐成为许多人提高写作效率和质量的得力助手。面对众多的选择&#xff0c;哪些AI写作软件真正好用呢&#xff1f;以下为大家介绍三款强大的AI写作软件。 第一款&#xff1a;火呱AI写作 它凭借其强大的语言理解和生成能力脱颖而出。…

C++随机数生成神器:rand(),让你的代码更加引人入胜!

更多资源请关注纽扣编程微信公众号 使用 rand 函数可以获取 机数大小是在0到RAND_MAX&#xff0c;值为2147483647&#xff0c;它是在stdlib中定义的&#xff0c;如果我们希望在某个范围内&#xff0c;可以使用 % 结合 / 来实现 但是不难发现&#xff0c;这里获得的随机数是…

k8s 1.24.x之后如果rest 访问apiserver

1.由于 在 1.24 &#xff08;还是 1.20 不清楚了&#xff09;之后&#xff0c;下面这两个apiserver的配置已经被弃用 了&#xff0c;简单的说就是想不安全的访问k8s是不可能了&#xff0c;所以只能走安全的访问方式也就是 https://xx:6443了&#xff0c;所以需要证书。 - --ins…

MySQL 主备环境搭建 docker

MySQL 主备环境搭建 docker 拉取docker镜像 sudo docker pull mysql:8.0 启动容器 docker run -p 3339:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD123456 -d mysql:8.0docker run -p 3340:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD123456 -d mysql:8.0配置 M…

通过域名接口申请免费的ssl多域名证书

来此加密已顺利接入阿里云的域名接口&#xff0c;用户只需一键调用&#xff0c;便可轻松完成域名验证&#xff0c;从而更高效地申请证书。接下来&#xff0c;让我们详细解读一下整个操作过程。 来此加密官网 免费申请SSL证书 免费SSL多域名证书&#xff0c;泛域名证书。 首先&a…

linux 错误记录(三)

这里的内核源码路径&#xff1a; cd /usr/src/linux-headers-5.4.0-150-generic/ 内核版本&#xff1a; $ uname -r 5.4.0-150-generic 错误现象 ./include/uapi/asm-generic/int-ll64.h:12:10: fatal error: asm/bitsperlong.h: No such file or directory 搜索后是有的 …

STM32控制HC-SR04超声模块获取距离

欢迎入群共同学习交流 时间记录&#xff1a;2024/5/23 一、模块介绍 &#xff08;1&#xff09;引脚介绍 VCC&#xff1a;电源引脚&#xff0c;接单片机3.3/5V GND&#xff1a;电源地 Trig&#xff1a;超声信号触发引脚 Echo&#xff1a;超声信号接收引脚 &#xff08;2&…