定义

  1. 公共接口类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)都包含在其内

作用

  1. 每次有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中;然后传递都service方法(doGetdoPost)中给我们使用,我们可以通过HttpServletRequest对象,获取到所有的请求信息

常用方法

  1. 获得客户机信息
    getRequestURL() - 返回客户端发出请求的统一资源定位符(绝对路径)。
    getRequestURI() - 返回请求行中的资源路径。

    getRemoteHost() - 返回发出请求的客户机的完整主机名
    getMethod() - 得到客户机请求方式
    2.获得客户机请求头
    getHeader(string name) - 获取请求头

    1. 获得客户机请求参数(客户端提交的数据)
      getParameter() - 获取请求参数
      getParameterValues() - 获取请求参数(多个值的时候使用)

如何获取客户端发送的数据

表单

注:在网页路径后面加上form.html前提是要和index.js在一个目录下

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>表单</title>
  6. </head>
  7. <body>
  8. <form action="http://localhost:8080/firstWeb_war_exploded/ReqServlet" method="get">
  9. 用户名:<input type="text" name="userName"><br/>
  10. 密码:<input type="password" name="password"><br/>
  11. 兴趣爱好:<input type="checkbox" name="hobby" value="cpp">c++
  12. <input type="checkbox" name="hobby" value="java">java
  13. <input type="checkbox" name="hobby" value="js">js<br/>
  14. <input type="submit">
  15. </form>
  16. </body>
  17. </html>

java

  1. package study;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.HttpServlet;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import java.io.IOException;
  7. import java.util.Arrays;
  8. /**
  9. * @author:Cherry
  10. * @createTime:2021-01-13 18:37
  11. */
  12. public class ReqServlet extends HttpServlet {
  13. @Override
  14. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. //获取请求的参数
  16. String userName = req.getParameter("userName");
  17. String password = req.getParameter("password");
  18. String[] hobby = req.getParameterValues("hobby");
  19. System.out.println("用户名:"+userName);
  20. System.out.println("密码:"+password);
  21. System.out.println("兴趣爱好:"+ Arrays.asList(hobby));
  22. }
  23. }

后台结果

用户名:wangyibo 密码:858585 兴趣爱好:[cpp, java, js]

解决post请求中文乱码问题

设置的字符集要在参数请求之前才有效

  1. package study;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.HttpServlet;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;
  6. import java.io.IOException;
  7. import java.util.Arrays;
  8. /**
  9. * @author:Cherry
  10. * @createTime:2021-01-13 18:37
  11. */
  12. public class ReqServlet extends HttpServlet {
  13. @Override
  14. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. //设置请求体的字符集为UTF-8,解决post请求的中文乱码问题
  16. req.setCharacterEncoding("UTF-8");
  17. System.out.println("---------doPost--------");
  18. //获取请求的参数
  19. String userName = req.getParameter("userName");
  20. String password = req.getParameter("password");
  21. String[] hobby = req.getParameterValues("hobby");
  22. System.out.println("用户名:"+userName);
  23. System.out.println("密码:"+password);
  24. System.out.println("兴趣爱好:"+ Arrays.asList(hobby));
  25. }
  26. }