Request和Response学习笔记2
Request 获取请求行数据
获取方法
复制String getMethod() // 获取请求方式 String getContextPath() // 获取虚拟目录 String getServletPath() // 获取Servlet路径 String getRequestURI() StringBuffer getRequestURL() // 获取请求URI、URL String getProtocol() // 获取协议及版本 String getRemoteAddr() // 获取客户机的IP地址
URI & URL 的说明:
- URL:统一资源定位符
- URI:统一资源标识符
如:
- 例子1
- http://localhost/stringbug/demo1 —— URL
- /stringbug/demo1 —— URI
- 例子2
- 中华人民共和国 —— URL
- 共和国 —— URI
创建一个类,继承HttpServlet类
复制package study.request; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/study/request/demo01") public class RequestDemo01 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
String getMethod() 方法
复制protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // String getMethod() 获取请求方式 System.out.println(req.getMethod()); }
String getContextPath() 方法
复制protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // String getContextPath() 获取虚拟目录 System.out.println(req.getContextPath()); }
String getServletPath() 方法
复制protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // String getServletPath() 获取Servlet路径 System.out.println(req.getServletPath()); }
String getRequestURI()、StringBuffer getRequestURL() 方法
复制protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // String getRequestURI() 获取请求URI // StringBuffer getRequestURL() 获取请求URL System.out.println(req.getRequestURI()); System.out.println(req.getRequestURL()); }
String getProtocol() 方法
复制protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // String getProtocol() 获取协议及版本 System.out.println(req.getProtocol()); }
String getRemoteAddr() 方法
复制protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // String getRemoteAddr() 获取客户机的IP地址 System.out.println(req.getRemoteAddr()); }
创建一个html文件
复制<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Request Study</title> </head> <body> <form action="/RequestAndResponse_war_exploded/study/request/demo01" method="get"> <input name="username"> <input type="submit" value="get提交"> </form> </body> </html>
开启服务器
-
用户访问:http://localhost:8080/RequestAndResponse_war_exploded/HelloRequest.html
-
随便输入点内容,提交,如输入:RequestTest
页面跳转到:http://localhost:8080/RequestAndResponse_war_exploded/study/request/demo01?username=RequestTest
-
获取请求方式:getMethod() 方法输出
复制
GET -
获取虚拟目录:getContextPath() 方法输出
复制
/RequestAndResponse_war_exploded -
获取Servlet路径:getServletPath() 方法输出
复制
/study/request/demo01 -
获取请求URI:getRequestURI() 方法输出
复制
/RequestAndResponse_war_exploded/study/request/demo01 -
获取请求URL:getRequestURL() 方法输出
复制
http://localhost:8080/RequestAndResponse_war_exploded/study/request/demo01 -
获取协议及版本:getProtocol() 方法输出
复制
HTTP/1.1 -
获取客户机的IP地址:getRemoteAddr() 方法输出
复制
0:0:0:0:0:0:0:1
-
Request 获取请求头数据
获取方法
复制String getHeader(String name) // 通过请求头的名称获取请求头的值 Enumeration<String> getHeaderNames() // 获取所有的请求头名称
创建一个类(RequestDemo02.java),使用这两个方法
复制package study.request; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Enumeration; @WebServlet("/study/request/demo02") public class RequestDemo02 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 获取所有请求头名称 Enumeration<String> headerNames = req.getHeaderNames(); // Enumeration接口,功能由Iterator复制。 while (headerNames.hasMoreElements()) { String headerName = headerNames.nextElement(); // 根据请求头名称获取请求头名称的值 String headerValue = req.getHeader(headerName); System.out.println(headerName + " : " + headerValue); } } }
开启服务器
访问:http://localhost:8080/RequestAndResponse_war_exploded/study/request/demo02
控制台输出:

自己根据请求头名字获取请求头
user-agent
获取用户访问资源链接时使用的浏览器。
复制package study.request; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/study/request/demo02") public class RequestDemo02 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 演示获取请求头数据:user-agent String userAgentValue = req.getHeader("user-agent"); // 判断用户使用什么浏览器发出的请求 if (userAgentValue.contains("Chrome")) { System.out.println("来自谷歌浏览器的访问!!!"); } else if (userAgentValue.contains("Firefox")) { System.out.println("来自火狐浏览器的访问!!!"); } else if (userAgentValue.contains("XXX")) { System.out.println("来自 XXX 浏览器的访问!!!"); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
谷歌浏览器访问:http://localhost:8080/RequestAndResponse_war_exploded/study/request/demo02
控制台输出:
复制来自谷歌浏览器的访问!!!
referer
获取用户跳转到目的页面之前的那个页面的URL
复制package study.request; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/study/request/demo02") public class RequestDemo02 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 演示获取请求头数据:referer String refererValue = req.getHeader("referer"); System.out.println(refererValue); if (refererValue.contains("/RequestAndResponse_war_exploded")) { System.out.println("可以正常访问"); } else { System.out.println("不可以正常访问"); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
浏览器访问:http://localhost:8080/RequestAndResponse_war_exploded/HelloRequest02.html

点击看电影
,页面跳转到:http://localhost:8080/RequestAndResponse_war_exploded/study/request/demo02?View+Name=唐人街探案3
控制台输出:
复制http://localhost:8080/RequestAndResponse_war_exploded/HelloRequest02.html 可以正常访问
假如不是从 /RequestAndResponse_war_exploded
资源链接中跳转过来的话,那么,控制台会输出:不可以正常访问
-
也可以更改上例中的部分内容,是的部分输出在页面上:
复制
// 将这部分内容修改 System.out.println("可以正常访问"); System.out.println("不可以正常访问"); 复制
// 修改为 System.out.println("可以正常访问"); resp.setContentType("text/html;charset=utf-8"); resp.getWriter().write("你可以看电影~~~"); System.out.println("不可以正常访问"); resp.setContentType("text/html;charset=utf-8"); resp.getWriter().write("你不可以看电影~~~"); -
从
/RequestAndResponse_war_exploded
资源链接中跳转过来,控制台输出:复制
http://localhost:8080/RequestAndResponse_war_exploded/HelloRequest02.html 可以正常访问 点击
看电影
,页面跳转到:http://localhost:8080/RequestAndResponse_war_exploded/study/request/demo02?View+Name=唐人街探案3页面内容如下:
Request 获取请求体的数据
步骤
- 获取流对象
BufferedReader getReader()
:获取字符输入流,只能操作字符数据ServletInputStream getInputStream()
:获取字节输入流,可以操作所有类型数据
- 再从流对象中拿数据
简单实现
-
创建一个demo.java:RequestDemo03.java
复制
package study.request; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.IOException; @WebServlet("/study/request/demo03") public class RequestDemo03 extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 获取请求消息体 // 1. 获取字符流 BufferedReader reqReader = req.getReader(); String line; while ((line = reqReader.readLine()) != null) { System.out.println(line); } } } -
创建一个html文件:login.html
复制
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用户登录</title> </head> <body> <form action="/RequestAndResponse_war_exploded/study/request/demo03" method="post"> <input type="email" name="userEmail" placeholder="请输入您的邮箱"><br> <input type="password" name="userPassword" placeholder="请输入您的密码"><br> <input type="submit" value="登录"> </form> </body> </html> -
启动服务器,浏览器访问:http://localhost:8080/RequestAndResponse_war_exploded/login.html
-
点击登录,页面跳转到:http://localhost:8080/RequestAndResponse_war_exploded/study/request/demo03
控制台输出:
复制
userEmail=stringbug%40icloud.com&userPassword=123456 浏览器页面内容:
参考文献
- HttpServletRequest获取客户端所有参数
- [JavaEE-HttpServletRequest总结](
本文来自博客园,作者:LeeHua,转载请注明原文链接:https://www.cnblogs.com/liyihua/p/14477433.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)