定义
公共接口类HttpServletRequest继承自ServletRequest.[客户端](http://baike.baidu.com/view/930.htm)[浏览器](http://baike.baidu.com/view/7718.htm)发出的请求被[封装](http://baike.baidu.com/view/154910.htm)成为一个HttpServletRequest对象。所有的信息包括请求的地址,请求的参数,提交的数据,上传的文件[客户端](http://baike.baidu.com/view/930.htm)的ip甚至客户端[操作系统](http://baike.baidu.com/view/880.htm)都包含在其内
作用
每次有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中;然后传递都service方法(doGet和doPost)中给我们使用,我们可以通过HttpServletRequest对象,获取到所有的请求信息
常用方法
获得客户机信息
getRequestURL() - 返回客户端发出请求的统一资源定位符(绝对路径)。
getRequestURI() - 返回请求行中的资源路径。getRemoteHost() - 返回发出请求的客户机的完整主机名
getMethod() - 得到客户机请求方式
2.获得客户机请求头
getHeader(string name) - 获取请求头- 获得客户机请求参数(客户端提交的数据)
getParameter() - 获取请求参数
getParameterValues() - 获取请求参数(多个值的时候使用)
- 获得客户机请求参数(客户端提交的数据)
如何获取客户端发送的数据
表单
注:在网页路径后面加上form.html前提是要和index.js在一个目录下
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>表单</title></head><body><form action="http://localhost:8080/firstWeb_war_exploded/ReqServlet" method="get">用户名:<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">js<br/><input type="submit"></form></body></html>
java
package study;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.Arrays;/*** @author:Cherry* @createTime:2021-01-13 18:37*/public class ReqServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取请求的参数String userName = req.getParameter("userName");String password = req.getParameter("password");String[] hobby = req.getParameterValues("hobby");System.out.println("用户名:"+userName);System.out.println("密码:"+password);System.out.println("兴趣爱好:"+ Arrays.asList(hobby));}}
后台结果
用户名:wangyibo 密码:858585 兴趣爱好:[cpp, java, js]
解决post请求中文乱码问题
设置的字符集要在参数请求之前才有效
package study;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.Arrays;/*** @author:Cherry* @createTime:2021-01-13 18:37*/public class ReqServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置请求体的字符集为UTF-8,解决post请求的中文乱码问题req.setCharacterEncoding("UTF-8");System.out.println("---------doPost--------");//获取请求的参数String userName = req.getParameter("userName");String password = req.getParameter("password");String[] hobby = req.getParameterValues("hobby");System.out.println("用户名:"+userName);System.out.println("密码:"+password);System.out.println("兴趣爱好:"+ Arrays.asList(hobby));}}
