获取请求行
- 获取请求方法
String getMethod()
System.out.println(request.getMethod());
控制台结果:
- 获取请求资源
1.String getRequestURL()
System.out.println(request.getRequestURL());
控制台结果:
2.String getRequestURI()
System.out.println(request.getRequestURI());
控制台结果:
- 获取应用名称
System.out.println(request.getContextPath());
- 获取get查询参数
System.out.println(request.getQueryString());
控制台结果:
获取请求头
- 获取所有的请求头名称
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()){
System.out.println(headerNames.nextElement());
}
- 获取指定的头信息
System.out.println(request.getHeader("accept"));
控制台打印结果:
- 打印所有的请求头和请求头内容
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()){
String s = headerNames.nextElement();
String s1 = request.getHeader(s);
System.out.println(s+":"+s1);
}
控制台打印结果:
- referer
告诉服务器我是从哪个页面链接过来的
System.out.println(request.getHeader("referer"));
注意事项:
通过以下方式发送请求才会获取:
- 直接用<a href=""
- 用Submit或提交的表单(POST或GET)
- 用JAvaScript提交的表单(POST或GET)
通过以下方式不会有referer:
- 从收藏夹链接
- 单击主页或自定义的地址
获取请求体
- 获取一个值
request.getParameter("name");
- 获取多个值,返回的是一个数组。
String[] parameterValues = request.getParameterValues("hobby");
- 获取所有请求参数名称,返回的是一个枚举。
Enumeration<String> parameterNames = request.getParameterNames();
- 获取所有请求参数
Map<String, String[]> parameterMap = request.getParameterMap();
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
System.out.println(entry.getKey());
System.out.println(Arrays.toString(entry.getValue()));
}
解决中文乱码问题
- 什么时候使用get方式与post方式
发送的参数不需要写到数据库当中使用get。
发送的参数需要保存到数据库当中使用post。
form一般提交数据的数据为post - 造成乱码的原因
HTML设置了浏览器在传递请求参数时,采用的编码时UTF-8,但是在解码的时候采用的是默认的ISO8859-1 不支持中文,所以乱码。 - 通用解决办法
获取对应的参数,通过iso8859-1转回二进制位,再以utf-8的形式转成字符串,存在的问题,每一个参数都必须得要转回二进制位,再转为字符串。
str = new String(str.getBytes("ISO8859-1"),"utf-8");
- request方法解决中文乱码 :只适用于post
request.setCharacterEncoding("utf-8");
请求转发
重定向与请求转发的区别:
- 重定向:找servlet1,通过设置响应,告诉浏览器, 再让浏览器发送请求到servlet2,发两次请求,地址栏会发生变化。
- 请求转发:请求转发只需要发送一次直接,找servlet1,在servlet1当中直接转发给servlet2,不要再告诉浏览器,只发送一次请求,浏览器地址栏当中还是servlet1,不会发生变化。
实现转发:
- 通过请求对象获取一个转发器,返回一个RequestDispatcher,
WEB-INF目录中的内容对getRequestDispatcher对象也是可见的 。 - 通过转发器进行转发,调用转发器的forward方法进行转发。
RequestDispatcher dispatcher = request.getRequestDispatcher("/Servlet5");
dispatcher.forward(request,response);
request域对象:
在一次请求过程当中,request是共享的。在一个servlet当中设置的参数,转发到另外一个servlet,取出来的是同一个。
生命周期:
- 创建:发送一个请求时创建一个request对象。
- 销毁:请求结束,浏览器给出响应时,销毁。
- 作用范围:一次请求当中。
客户端地址与服务器端地址
- 客户端地址
客户端访问服务器使用的地址,服务器外部地址,在写的时候要写上web应用的名称 /应用名称/资源。 - 服务器地址
在服务内部当中使用的地址,不需要写web应用名称 /资源名称。