- 关于
Request
:只需要会如何获取 请求行
, 请求头
,请求体
即可
获取请求行
获取请求方法
String method = request.getMethod();

获取请求的资源
StringBuffer requestURL = request.getRequestURL();


String requestURI = request.getRequestURI();


获取应用的名称
String contextPath = request.getContextPath();

获取Get请求参数
String queryString = request.getQueryString();


获取请求头
获取所有请求头名称
@Override
protected void service(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
System.out.println(headerNames.nextElement());
}
}

获取指定头信息
String header = request.getHeader("user-agent");

打印所有请求头和请求头内容
@Override
protected void service(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String headerValue = request.getHeader(headerName);
System.out.println("headerName = " + headerName + " headerValue = " + headerValue);
}
}


请求头referer
- 告诉服务器,我是从哪个页面链接过来的
- 可以做防盗链
@Override
protected void service(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
String referer = request.getHeader("referer");
System.out.println(referer);
}

- 🐤注意事项
- 只有通过以下的方式发送请求才会获取到
- 直接用
<a href="">
- 或者用 Submit 或
<input type="image">
提交的表单(POST 或 GET)即可获取
- 🐸通过以下的方式不会有
referer
- 从收藏夹打开发送的链接

- 单击主页或自定义的地址
- 在浏览器中直接输入地址
- 反正就是只有在页面中访问才会有
referer
这个请求头
获取请求体
获取一个值
String name = request.getParameter("name");

获取多个值
String[] parameterValues = request.getParameterValues("hobby");

获取所有请求参数名称
Enumeration<String> parameterNames = request.getParameterNames();

获取所有请求参数
- 获取所有的请求参数
- 是
key
-value
的 Map<String,String[]> 集合
Map<String, String[]> parameterMap = request.getParameterMap();
parameterMap.entrySet().forEach(item -> {
System.out.println(item.getKey());
System.out.println(Arrays.toString(item.getValue()));
});

解决中文乱码问题
- 什么时候使用
get
请求方式与 post
请求方式
- 发送的参数不需要写到数据库当中时使用
get
请求方式
- 发送的参数需要保存到数据库当中时使用
post
请求方式
form
表单一般提交数据的方式为 post
请求方式
造成乱码的原因
- 发送请求时,会对参数进行编码,编码使用的是
ISO8859-1
,这个编码是不支持中文的,所以会造成乱码
通用解决乱码的办法
- 获取对应的参数
- 通过
iso8859-1
转回二进制位,再以 utf-8
的形式转成字符串
String parameter = request.getParameter("name");
byte[] bytes = parameter.getBytes("ISO8859-1");
String str = new String(bytes, "UTF-8");

- 存在的问题,每一个参数都必须得要转回二进制位,再转为字符串
Request方法解决中文乱码
request.setCharacterEncoding("UTF-8");

请求转发
- 找
servlet1
,通过设置响应,告诉浏览器,再让浏览器发送请求到 servlet2
- 发
两次
请求
- 地址栏会发生变化
- 请求转发只需要发送一次请求,直接找
servlet1
,在 servlet1
当中直接转发给 servlet2
- 不要再告诉浏览器
- 只发送一次请求
- 浏览器地址栏当中还是
servlet1
,不会发生变化
实现转发
request.getRequestDispatcher("/jonathantang");


- 通过
转发器
进行转发
- 调用
转发器
的 forward
方法进行转发
requestDispatcher.forward(request, resp);

Request域对象
- 在一次请求过程当中
Request
是共享的
- 在一个
Servlet
当中设置的参数,转发到另外一个 Servlet
,取出来的是同一个参数
Request生命周期
- 创建:发送一个请求时创建一个
request
对象
- 销毁:请求结束,给浏览器响应时,销毁
- 作用范围:一次请求当中
客户端地址与服务器端地址
客户端地址
- 客户端访问服务器使用的地址
- 服务器外部的地址
- 在写的时候要写上
web应用的名称/应用名称/资源
服务器地址
- 在服务内部当中使用的地址
- 不需要写
web应用名称/资源名称
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具