HttpServletRequest类的作用
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的Http协议解析封装到Request对象中,然后传递到service方法(doGet()和doPost()给我们使用,我们可以通过HttpServletRequest类的对象,获取到所有的请求信息。
HttpServletRequest类的常用方法
- getRequestURI() 获取资源的请求路径
- getRequestURL() 获取请求的统一资源定位符
- getRemoteHost() 获取客户端的ip地址
- getHeader() 获取请求头
- getParameter() 获取请求的参数
- getParameterValues() 获取请求的参数(多个值的时候使用)
- getMethod() 获取请求的方式(GET和POST)
- setAttribute(key,value) 设置域数据
- getAttribute(key) 获取请求域数据
- getRequestDispatcher() 获取请求转发对象
- setCharacterEncoding() 设置字符集的编码,防止乱码
Get请求的代码
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取URI
System.out.println("getRequestURI="+req.getRequestURI());
//获取URL
System.out.println("getRequestURL="+req.getRequestURL());
/*在IDEA中,使用localhost访问时,得到的是getRemoteHost=0:0:0:0:0:0:0:1
* */
//在浏览器中,使用127.0.0.1访问时,得到的客户端ip地址是------>127.0.0.1
//在浏览器中,使用真实的ip访问时,得到的客户端地址是------>真实的客户端ip地址
System.out.println("getRemoteHost="+req.getRemoteHost());
//获取请求头
System.out.println("getHeader="+req.getHeader("User-Agent"));
System.out.println("getHeader="+req.getHeader("Accept-Encoding"));
System.out.println("getHeader="+req.getHeader("Accept-Language"));
//获取请求的类型
System.out.println("getMethod="+req.getMethod());
//获取单个请求参数
System.out.println("username="+req.getParameter("username"));
System.out.println("password="+req.getParameter("password"));
//获取多个请求参数
String[] hobby = req.getParameterValues("hobby");
System.out.println("hobby="+ Arrays.asList(hobby));
}
a.html部分代码
<form action="http://localhost:8080/servlet01/hello4" method="get">
<!-- <form action="http://localhost:8080/servlet01/hello4" method="post">-->
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<!--如果复选框里面没有value属性值时,value为on,
默认返回的参数是on,而不是你想要的篮球,足球等参数-->
兴趣爱好:<input type="checkbox" name="hobby" value="篮球">篮球
<input type="checkbox" name="hobby" value="足球">足球
<input type="checkbox" name="hobby" value="乒乓球">乒乓求<br>
<input type="submit">
</form>
GET请求部分的输出
getRequestURI=/servlet01/hello4
getRequestURL=http://localhost:8080/servlet01/hello4
getRemoteHost=0:0:0:0:0:0:0:1
getHeader=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
getHeader=gzip, deflate, br
getHeader=zh-CN,zh;q=0.9
getMethod=GET
username=爪洼岛
password=666666
hobby=[篮球, 足球]
Post请求的部分代码
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("username="+req.getParameter("username"));
String[] hobby = req.getParameterValues("hobby");
System.out.println("hobby="+ Arrays.asList(hobby));
}
把a.html表单改为post请求方式
<form action="http://localhost:8080/servlet01/hello4" method="post">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<!--如果复选框里面没有value属性值时,value为on,
默认返回的参数是on,而不是你想要的篮球,足球等参数-->
兴趣爱好:<input type="checkbox" name="hobby" value="篮球">篮球
<input type="checkbox" name="hobby" value="足球">足球
<input type="checkbox" name="hobby" value="乒乓球">乒乓求<br>
<input type="submit">
</form>
在没有进行编码转换之前的输出是
username=?????????
hobby=[??????, è?????]
使用setCharacterEncoding进行编码转换后,可以正常是输出中文字符
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决post中文乱码问题
req.setCharacterEncoding("UTF-8");
System.out.println("username="+req.getParameter("username"));
String[] hobby = req.getParameterValues("hobby");
System.out.println("hobby="+ Arrays.asList(hobby));
}
username=爪洼岛
hobby=[篮球, 足球]