获取请求行
获取请求方法
String getMethod()
获取请求资源
String getRequestURL()
String getRequestURI()
获取应用名称
String getContextPath()
获取get查询参数
String getQueryString()
获取请求头
1.获取所有的请求头名称
Enumeration<String> headernames= request.getHeaderNames();
//获取出所有请求头名称并打印
while(headernames.hasMoreElements()){
System.out.println(headernames.nextElement());
}
2.获取指定的头信息
request.getHeader("请求头名称");
referer
告诉服务器我是从哪个页面链接过来的
String referer =request.getHeader("referer");
注意事项
通过以下方式发送请求才会获取
直接用<a href="">
用Submit或<input type="image">提交的表单(POST或GET)
用JAvaScript提交的表单(POST或GET)
通过以下方式不会有referer
从收藏夹链接
单击主页或自定义的地址
在浏览器中直接输地址
获取请求体
1.获取一个值
req.getParameter("名称")
2.获取多个值
req.getParameterValues("名称")
返回的是一个数组
3.获取所有请求参数名称
req.getParameterNames()
返回的是一个枚举
4.获取所有请求参数
req.getParameterMap()
获取所有请求参数的key-value集合Map<String,String[]>
解决中文乱码问题
什么时候使用get方式与post方式
1.发送的参数不需要写到数据库当中使用get
2.发送的参数需要保存到数据库当中使用post
form一般提交数据的数据为post
造成乱码的原因
发送请求时, 会对参数进行编码,编码使用的是ISO8859-1 不支持中文,所以乱码
通用解决办法
获取对应的参数
通过iso8859-1转回二进制位,再以utf-8的形式转成字符串
存在的问题,每一个参数都必须得要转回二进制位,再转为字符串
request方法解决中文乱码
只适用于post
请求转发
重定向与请求转发的区别
重定向
找servlet1,通过设置响应,告诉浏览器, 再让浏览器发送请求到servlet2
发两次请求
地址栏会发生变化
请求转发
请求转发只需要发送一次直接,找servlet1,在servlet1当中直接转发给servlet2,不要再告诉浏览器
只发送一次请求
浏览器地址栏当中还是servlet1,不会发生变化
实现转发
1.通过请求对象获取一个转发器
request.getRequestDispatcher(String path)
返回一个RequestDispatcher
2.通过转发器进行转发
调用转发器的forward方法进行转发
disp.forward(req,rep)
request域对象
在一次请求过程当中
request是共享的。在一个servlet当中设置的参数,转发到另外一个servlet,取出来的是同一个
生命周期
创建
发送一个请求时创建一个request对象
销毁
请求结束,浏览器给出响应时,销毁
作用范围
一次请求当中
客户端地址与服务器端地址
客户端地址
客户端访问服务器使用的地址
服务器外部地址
在写的时候要写上web应用的名称 /应用名称/资源
服务器地址
在服务内部当中使用的地址
不需要写web应用名称 /资源名称