HttpServletRequest简介
HttpServletRequest是什么?
- HttpServletRequest是一个接口,其父接口是ServletRequest;
- HttpServletRequest是Tomcat将请求报文转换封装而来的对象,在Tomcat调用service方法时传入;
- HttpServletRequest代表客户端发来的请求,请求中的所有信息都可以通过该对象获得;
如何使用HttpServletRequest?
获取请求行信息相关方法:
这些方法用于获取客户端发送请求时的信息,包括 URL、协议、方法、端口等。
| API | 功能解释 |
|---|---|
StringBuffer getRequestURL() | 获取客户端请求的完整 URL。 |
String getRequestURI() | 获取客户端请求的项目目录的具体资源。 |
int getServerPort() | 获取客户端发送请求时使用的服务器端口。 |
int getLocalPort() | 获取应用程序所在容器的端口。 |
int getRemotePort() | 获取客户端程序所使用的端口。 |
String getScheme() | 获取请求的协议(如 HTTP、HTTPS)。 |
String getProtocol() | 获取请求使用的协议及版本号(如 HTTP/1.1)。 |
String getMethod() | 获取请求的 HTTP 方法(如 GET、POST)。 |
获取请求头信息相关方法:
这些方法用于处理请求头信息,包括获取特定请求头或所有请求头的名称。
| API | 功能解释 |
|---|---|
String getHeader(String headerName) | 根据头名称获取请求头的值。 |
Enumeration getHeaderNames() | 获取所有的请求头名称。 |
String getContentType() | 获取 Content-Type 请求头。 |
package Servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.util.Enumeration;@WebServlet("/servlet04")
public class servlet4_1 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 行情求相关 get/post uri http/1.1System.out.println(req.getMethod()); // 获取请求方式System.out.println(req.getScheme()); // 获取请求协议System.out.println(req.getProtocol()); //获取请求协议及其版本System.out.println(req.getRequestURI());// 获取请求的uri 项目内的资源路径System.out.println(req.getRequestURL());// 获取请求的url 项目内的资源的完成的路径System.out.println(req.getLocalPort());//本应用容器的端口号8080System.out.println(req.getServerPort()); // 客户端发请求时使用的端口号System.out.println(req.getRemotePort());// 客户端软件的端口号System.out.println("--------------------头请求-------------------------");// 根据名字单独获取请求头String accept = req.getHeader("Accept");System.out.println("Accept :" + accept );// 获取本次请求中所有的请求头的名字System.out.println("--------------------所有请求头----------------------");Enumeration<String> headNames = req.getHeaderNames();while(headNames.hasMoreElements()){String hname = headNames.nextElement();System.out.println(hname +" : " +req.getHeader(hname));}}
}
控制台输出:
浏览器的报文内容

获取请求参数相关API
在 Servlet 中,获取请求参数是指从客户端发送的 HTTP 请求中提取传递的参数。这些参数通常通过 URL、表单提交 或 查询字符串 发送,常见的获取请求参数的方法有以下几种:
GET 请求中的查询参数: 通过 URL 传递的参数,例如:http://example.com?name=John&age=25。参数 name 和 age 就是 URL 中的查询参数。
POST 请求中的表单数据: 通过 HTML 表单的提交来传递数据。表单数据以键值对的形式提交,服务器可以接收这些参数。
| API | 功能解释 |
|---|---|
String getParameter(String parameterName) | 根据请求参数名获取请求单个参数值。 |
String[] getParameterValues(String parameterName) | 根据请求参数名获取请求多个参数值数组。 |
Enumeration getParameterNames() | 获取所有请求参数名。 |
Map<String, String[]> getParameterMap() | 获取所有请求参数的键值对集合。 |
BufferedReader getReader() throws IOException | 获取读取请求体的字符输入流。(JSON串) |
ServletInputStream getInputStream() throws IOException | 获取读取请求体的字节输入流。(读文件) |
int getContentLength() | 获取请求体长度的字节数。 |
package Servlet;import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;@WebServlet ("/servlet05")
public class servlet4_2 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取键值对形式的参数// 获取请求中的参数String username = req.getParameter("username");System.out.println(username);String password = req.getParameter("usePsw");System.out.println(password);// 根据参数名获取多个参数值String[] hobbies = req.getParameterValues("hobby");System.out.println(Arrays.toString(hobbies));// 获取所有的参数名Enumeration<String> pnames = req.getParameterNames();while(pnames.hasMoreElements()){String pname = pnames.nextElement();String[] values = req.getParameterValues(pname);if(values.length > 1){System.out.println(Arrays.toString(values));}else System.out.println(pname + " = " + values[0]);}System.out.println("----------------Map--------------------");// 返回所有参数的map集合 key = 参数名 value = 参数值Map<String,String[]> parameterMap = req.getParameterMap();Set<Map.Entry<String,String[]>> entries = parameterMap.entrySet();for (Map.Entry<String,String[]> entry : entries){String pname = entry.getKey();String[] value = entry.getValue();if(value.length > 1){System.out.println(pname +" = " + Arrays.toString(value));} else System.out.println(pname + " = " + value[0]);}}}
.System.out.println(Arrays.toString(hobbies)):
Arrays.toString(hobbies)将数组hobbies转换为字符串表示形式(如["reading", "swimming", "coding"]),方便输出查看。System.out.println会将转换后的字符串打印到控制台,便于开发者检查获取到的参数值
HTML代码
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
# 可以改成post方法,Java代码同样可以处理
<form action="servlet05" method="get"><input type="text" name="username"> <br><input type="password" name="usePsw"> <br>爱好:<input type="checkbox" name="hobby" value="1"> 篮球<input type="checkbox" name="hobby" value="2"> 足球<input type="checkbox" name="hobby" value="3"> 排球<input type="checkbox" name="hobby" value="4"> 铅球<input type="submit" >
</form>
</body>
</html>
Get请求和post请求的区别
数据传递方式
- GET 请求:
- 数据通过 URL 查询字符串 传递,放在 URL 的末尾。
- 例如:
GET /search?query=java HTTP/1.1,其中query=java是查询参数。 - 查询字符串长度受浏览器和服务器的限制(通常在 2000 个字符左右)。
- POST 请求:
- 数据通过 请求体(body) 传递,而不是 URL。这使得 POST 请求适合传输较大或复杂的数据。
- 例如:
POST /submit HTTP/1.1,数据放在请求体中(如表单数据或 JSON 数据)。
其他常用API
| API | 功能解释 |
|---|---|
String getServletPath() | 获取请求的 Servlet 的映射路径。(就是WebServlet ("/servlet05")中的 /servlet05) |
ServletContext getServletContext() | 获取 ServletContext 对象,用于与 Servlet 环境交互。 |
Cookie[] getCookies() | 获取请求中所有的 Cookie。 |
HttpSession getSession() | 获取 HttpSession 对象,处理会话信息。 |
void setCharacterEncoding(String encoding) | 设置请求体字符编码。 |
HttpServletRequest怎么用?
1. 设置响应行相关:
| API | 功能解释 |
|---|---|
void setStatus(int code) | 设置响应状态码 |
setStatus(int code):用于设置 HTTP 响应的状态码,如200(成功)、404(未找到)、500(服务器内部错误)等。
2. 设置响应头相关:
| API | 功能解释 |
|---|---|
void setHeader(String headerName, String headerValue) | 设置或修改响应头键值对。 |
void setContentType(String contentType) | 设置 Content-Type 响应头以及字符集(设置 MIME 类型)。 |
setHeader(String headerName, String headerValue):用于设置或修改 HTTP 响应头信息。例如,设置Content-Type、Cache-Control等。setContentType(String contentType):用于设置Content-Type响应头,指定返回内容的类型,如text/html、application/json等。
3. 设置响应体相关:
| API | 功能解释 |
|---|---|
PrintWriter getWriter() throws IOException | 获取响应输出体放入信息的字符输出流(通常用于文本)。 |
ServletOutputStream getOutputStream() throws IOException | 获取响应输出体放入信息的字节输出流(通常用于二进制数据)。 |
void setContentLength(int length) | 设置响应体的字节长度,其实质是在设置 Content-Length 响应头。 |
getWriter():用于获取PrintWriter对象,可以通过它向客户端发送字符数据(如 HTML、JSON、纯文本等)。getOutputStream():用于获取ServletOutputStream对象,通常用于发送二进制数据(如图片、PDF 等)。setContentLength(int length):设置响应体的字节长度,用于告诉客户端响应内容的大小
package Servlet;import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.io.PrintWriter;@WebServlet("/servlet06")
public class servlet4_3 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 设置响应行相关的API
// resp.setStatus(404); // 故意响应404resp.setStatus(200);// 设置响应头相关的API
// resp.setHeader("aaa","valuea");
// resp.setHeader("Content-Type","text/html");
// resp.setHeader("Content-Length","1234");String info = "<h1>hello<h1>";resp.setContentType("text/html");resp.setContentLength(info.length());// 设置响应体内容的API// 获得一个响应体中输入文本字符输出流PrintWriter writer = resp.getWriter();writer.write(info);}
}
相关文章:
HttpServletRequest简介
HttpServletRequest是什么? HttpServletRequest是一个接口,其父接口是ServletRequest;HttpServletRequest是Tomcat将请求报文转换封装而来的对象,在Tomcat调用service方法时传入;HttpServletRequest代表客户端发来的请…...
c++开发之编译curl(安卓版本)
为了在 Android 上编译支持 OpenSSL 的 libcurl,你需要手动编译 libcurl 和 OpenSSL,并确保它们能够在 Android 的交叉编译环境中正常工作。以下是详细的步骤说明。 1. 安装必要工具 在编译之前,确保你已经安装了以下工具: And…...
QT+ESP8266+STM32项目构建三部曲三--QT从环境配置到源程序的解析
一、阿里云环境配置 大家在编写QT连接阿里云的程序之前,先按照下面这篇文章让消息可以在阿里云上顺利流转 QTESP8266STM32项目构建三部曲二--阿里云云端处理之云产品流转-CSDN博客文章浏览阅读485次,点赞7次,收藏4次。创建两个设备ÿ…...
Web APIs 5:Window对象(BOM)+本地存储
Web APIs 5(BOM:Window对象本地存储) 1.BOM(浏览器对象模型)(后面几个对象都为BOM对象) BOM对象包含:navigator、location、document(DOM对象)、history、screenBOM是一个全局对象,即JS中的顶…...
神经网络(四):UNet图像分割网络
文章目录 一、简介二、网络结构2.1编码器部分2.2解码器部分2.3完整代码 三、实战案例 论文链接:点击跳转 一、简介 UNet网络是一种用于图像分割的卷积神经网络,其特点是采用了U型网络结构,因此称为UNet。该网络具有编码器和解码器结构&#…...
Java 编码系列:注解处理器详解与面试题解析
引言 在上一篇文章中,我们详细探讨了 Java 注解的基本概念、自定义注解、元注解等技术。本文将继续深入探讨 Java 注解处理器(Annotation Processor),介绍如何编写注解处理器,并结合大厂的最佳实践和面试题详细解析其…...
C语言 | Leetcode C语言题解之第441题排列硬币
题目: 题解: class Solution { public:int arrangeCoins(int n) {return (int) ((sqrt((long long) 8 * n 1) - 1) / 2);} };...
Linux noVNC远程桌面(xfce)部署
一、安装 VNC 服务器和桌面环境 Notebook实验 常用vnc服务 VNC (Virtual Network Computing) 是一种远程桌面协议,可以让你通过网络访问服务器的图形界面。 TurboVNC:专为图形密集型应用设计,尤其适合 3D 可视化和高分辨率图像的远程传输…...
【网络安全】身份认证
1. 身份认证 1.1 定义 身份认证(Authentication)是确认用户身份的过程,确保只有授权的用户才能访问系统或资源。它通常涉及验证用户提供的凭证,如密码、生物特征或其他识别标志。 1.2 重要性 身份认证是信息安全的第一道防线&…...
LeetCode - #124 二叉树中的最大路径和(Top 100)
文章目录 前言1. 描述2. 示例3. 答案关于我们前言 本题为 LeetCode 前 100 高频题 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新到 123 期…...
Java:插入排序
目录 排序的概念 插入排序 直接插入排序 哈希排序 排序的概念 排序:所谓的排序,就是使一串记录,按照某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个…...
How FAR ARE WE FROM AGI?(ICLR AGI Workshop 2024)概览
关注B站可以观看更多实战教学视频:hallo128的个人空间 How FAR ARE WE FROM AGI?官网 How FAR ARE WE FROM AGI?(ICLR AGI Workshop 2024) 该研讨会将于2024年5月11日在奥地利维也纳以混合模式举行,作为 ICLR 2024年会议的一部…...
leetcode刷题day33|动态规划Part02(62.不同路径、63. 不同路径 II、 343.整数拆分、96.不同的二叉搜索树)
62.不同路径 机器人从(0 , 0) 位置出发,到(m - 1, n - 1)终点。 动规五部曲 1、确定dp数组(dp table)以及下标的含义 dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路…...
基于Python大数据的B站热门视频的数据分析及可视化系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…...
matlab-批处理图像质量变化并形成折线图 (PSNR)
%修改路径就能用,图片分辨率要一致 %clc;clear all;close all;tic;%清理内存 file_pathE:\test\resources\image\;% 批量图像所在的文件夹下 file_save_pathE:\test\resources\SaveImage\;% 要存储的地址 img_path_listdir(strcat(file_path,*.jpg));% 获取批量bm…...
[Doc][Ros2]ros2中Qos(Quality of Service,服务质量)介绍
在 ROS 2 中,QoS(Quality of Service,服务质量)是用于控制节点之间消息传递的可靠性、历史存储和数据持久性等方面的机制。通过 QoS 设置,用户可以更细粒度地控制消息传递的行为,确保在不同网络环境或应用场景中满足特定的通信需求。 几个常用的包: QoSProfile: 含义…...
SpringBoot日志集成-LogBack
Log4J:最早的Java日志框架之一,由Apache基金会发起,提供灵活而强大的日志记录机制JDK自带的日志框架:java.util.logging.Logg,是JDK1.4之后提供的日志API,已淘汰logback: logback一个开源的日志…...
Google BigTable架构详解
文章目录 什么是BigTable?架构图一、整体架构二、数据存储与索引存储模型 三、数据拆分与存储四、元数据管理五、读写流程 其他内容概览负载平衡其他存储和数据库选项 什么是BigTable? Bigtable是Google开发的一个高性能、可扩展的分布式存储系统,用于管理大规模…...
【python】如何切换ipynb的kernel至指定conda环境
需求介绍 打开(若无新建环境) 环境 conda env list conda activate cvml conda install ipykernel python -m ipykernel install --name cvml 以上完成后,打开jupyter 创建一个python文件 在kernel——>change kernel——>python[conda env:cvml] 参考资料…...
Linux【基础指令汇总】
目录 Linux命令的特点 1、文件管理 ls命令 cp命令 mkdir命令 mv命令 pwd命令 2、文档编辑 cat命令 echo命令 rm命令 tail命令 rmdir命令 3、系统管理 rpm命令 find命令 startx命令 uname命令 vmstat命令 4、磁盘管理 df命令 fdisk命令 lsblk命令 hdpar…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
