HttpServletRequest 介绍
1. HttpServletRequest 对象代表客户端的请求
2. 当客户端/浏览器通过 HTTP 协议访问服务器时,HTTP 请求头中的所有信息都封装在这个对象中
3. 通过这个对象的方法,可以获得客户端这些信息
代码:
package com.test;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@WebServlet("/hsr01")
public class HttpServletRequest01 extends HttpServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest)servletRequest;
StringBuffer url = req.getRequestURL();
System.out.println("请求的URL1地址:"+ url + "<br/>");
String uri = req.getRequestURI();
System.out.println("请求的资源:"+ uri + "<br/>");
String queryString = req.getQueryString();
System.out.println("请求的URL地址中附带的参数:"+queryString + "<br/>");
String pathInfo = req.getPathInfo();
System.out.println("pathInfo:"+pathInfo + "<br/>");
String remoteAddr = req.getRemoteAddr();
System.out.println("客户机的IP地址:"+remoteAddr + "<br/>");
String remoteHost = req.getRemoteHost();
System.out.println("客户机的完整主机名:"+remoteHost + "<br/>");
Integer remotePort= req.getRemotePort();
System.out.println("客户机使用的网络端口号:"+remotePort + "<br/>");
}
}
req.getParameter方法
最重要的如何获取请求头的某一个参数呢,构造一个请求头,在url后边第一个参数使用?后边跟着参数名=参数值
127.0.0.1:8080/s/hsr01?name=zhangsan
String name = req.getParameter("name");
System.out.println(name);
如果我要获取第二个参数怎么获取url怎么写 用&写
127.0.0.1:8080/s/hsr01?name=zhangsan&sex=woman
String sex = req.getParameter("sex");
System.out.println(sex);
getParameterValues方法,得到同一个参数的多个值
127.0.0.1:8080/s/hsr01?name=zhangsan&sex=woman&hobby=lanqiu&hobby=run
String[] hos = req.getParameterValues("hobby");
System.out.println(Arrays.toString(hos));
得到一个数组
请求乱码问题
由于现在的 request 属于接收客户端的参数,所以必然有其默认的语言编码,主要是由于在解析过程中默认使用的编码方式为 ISO-8859-1(此编码不支持中文),所以解析时一定会出现乱码。要想解决这种乱码问题,需要设置 request 中的编码方式,告诉服务器以何种方式来解析数据。或者在接收到乱码数据以后,再通过相应的编码格式还原。
方式一:
这种方式只针对 POST 有效(必须在接收所有的数据之前设定)
request.setCharacterEncoding("UTF-8");
1
方式二:
new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8")
1
借助了String 对象的方法,该种方式对任何请求有效,是通用的。
Tomcat8起,以后的GET方式请求是不会出现乱码的。