什么是HttpRequest,他有什么用
每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到Request 对象中。然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的信息。
HttpRequest常用API
i. getRequestURI() 获取请求的资源路径
ii. getRequestURL() 获取请求的统一资源定位符(绝对路径)
iii. getRemoteHost() 获取客户端的 ip 地址
iv. getHeader() 获取请求头
v. getParameter() 获取请求的参数
vi. getParameterValues() 获取请求的参数(多个值的时候使用)
vii. getMethod() 获取请求的方式 GET 或 POST
viii. setAttribute(key, value); 设置域数据
ix. getAttribute(key); 获取域数据
x. getRequestDispatcher() 获取请求转发对象
java代码:
@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("URI:"+request.getRequestURI());System.out.println("URL:"+request.getRequestURL());System.out.println("客户端 ip 地址 => " + request.getRemoteHost());System.out.println( "请求的方式 ==>> " + request.getMethod() );System.out.println("请求头 User-Agent ==>> " + request.getHeader("User-Agent"));}
获取请求的参数
Servlet文件:
import javax.servlet.*;import javax.servlet.http.*;import java.io.IOException;import java.util.Arrays;public class Servlet03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获取请求参数String username = request.getParameter("username");String password = request.getParameter("password");String[] hobby = request.getParameterValues("hobby");System.out.println("用户名:" + username);System.out.println("密码:" + password);System.out.println("兴趣爱好:" + Arrays.asList(hobby));}}
html文件:
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><form action="http://localhost:8080/Servlet03" method="post">用户名:<input type="text" name="username"><br/>密码:<input type="password" name="password"><br/>兴趣爱好:<input type="checkbox" name="hobby" value="cpp">C++<input type="checkbox" name="hobby" value="java">Java<input type="checkbox" name="hobby" value="js">JavaScript<br/><input type="submit"></form></body></html>
中文乱码问题
doGet 请求的中文乱码解决:
// 获取请求参数String username = req.getParameter("username");//1 先以 iso8859-1 进行编码//2 再以 utf-8 进行解码username = new String(username.getBytes("iso-8859-1"), "UTF-8");
doPOST 请求的中文乱码解决:
@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {// 设置请求体的字符集为 UTF-8,从而解决 post 请求的中文乱码问题req.setCharacterEncoding("UTF-8");}

