- 关于
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应用名称/资源名称