定义
公共接口类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 {
@Override
protected 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 {
@Override
protected 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));
}
}