一、概述
- HttpServletRequest接口来自于Servlet规范,存在于tomcat的servlet-api.jar中
- HttpServletRequest接口实现类由HTTP服务器负责提供,也封装在tomcat的servlet-api.jar中
- HttpServletRequest接口负责在doGet/doPost方法运行时读取HTTP请求协议包中的信息
- 开发人员习惯将HttpServletRequest接口修饰的对象称为请求对象
二、主要功能
- 可以读取HTTP请求协议包中请求行信息
- 可以读取保存在HTTP请求协议包中请求头(GET)或者请求体(POST)中参数信息
- 可以代替浏览器向HTTP服务器中申请资源文件调用
三、功能分析
1. 读取请求行信息
1.1 读取URL信息
request.getRequestURL().toString();
1.2 读取method信息
request.getMethod;
2. 读取请求头中所有请求参数名(GET)
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()){
String paramName = (String)paramNames.nextElement();
String value = request.getParameter(paramName);
System.out.println("请求参数名"+paramName+"请求参数值"+value);
}
3. 读取请求体中所有参数名(POST)
- 浏览器以GET方式发送请求,请求参数保存在请求头中,在HTTP请求协议包到达HTTP服务器之后,第一件事就是进行解码,请求头二进制内容由tomcat负责解码,默认使用utf-8字符集
- 浏览器以POST方式发送请求,请求参数保存在请求体中,在HTTP请求协议包到达HTTP服务器之后,第一件事就是进行解码,请求体二进制内容由当前请求对象(request)负责解码,request默认使用ISO-8859-1字符集(东欧语系),此时如果请求体参数内容是中文,将无法解码只能得到乱码
request.setCharacterEncoding("utf-8");
四、请求对象与响应对象生命周期
- 在HTTP服务器接收到浏览器发送的HTTP请求协议包之后,自动为当前的HTTP请求协议包生成一个请求对象和一个响应对象(形参)
- 在HTTP服务器调用doGet/doPost方法时,负责将请求对象和响应对象作为实参传递到对应doGet/doPost方法,确保doGet/doPost正确执行
- 在HTTP服务器准备发送回HTTP响应协议包之前,负责将本次请求关联的请求对象和响应对象销毁
请求对象和响应对象生命周期贯穿一次请求的处理过程中