介绍
1.HttpServletRequest接口来自servlet规范,存在于tomcat的servlet-api.jar
2.由tomcat负责提供
作用
1.读取http请求协议包中请求行、请求头、请求体信息
2.可以代替浏览器向http服务器申请资源调用
请求行:请求方法,请求URL
请求头
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:主机地址
如果是post请求有请求体,get没有,把请求参数放在请求头中
post方法中,会把数据以key value形式发送请求
生命周期:
诞生: 服务器端接收到请求的时候,创建。
销毁: service方法执行完毕,也就是响应结束, 对象销毁。
api 调用
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//方法
String method = req.getMethod();
//url
String url = req.getRequestURL().toString();
//url除去请求地址前的内容
String uri = req.getRequestURI();
//获取所有的请求内容
Enumeration<String> parameterNames = req.getParameterNames();
while (parameterNames.hasMoreElements()) {
//key
String paramName = parameterNames.nextElement();
System.out.println(paramName);
//value
String paramValue = req.getParameter(paramName);
System.out.println(paramValue);
}
}
问题描述:
以get方式发送中文参数内容,得到正常结果
以post方式发送中文参数内容,得到是乱码
原因:
浏览器已get方式发送请求,请求参数保存在请求头中,http请求协议包达到http服务器之后,第一件事就是解码
请求头二进制内容是由tomcat负责解码,tomcat9.0默认使用utf-8字符集
浏览器已post方式发送请求,请求参数保存在请求体,在http请求协议包达到http服务之后,第一件事就是解码
请求体二进制内容由当前请求对象request负责解码,request默认使用iso-8859-1字符集,一个东欧语系字符集,所以乱码
解决方案
req.setCharacterEncoding(“utf-8”);