fufu学JAVA之HttpServletRequest接口详解

深碍√TFBOYSˉ_ 2022-12-25 00:47 198阅读 0赞

HttpServletRequest接口

HttpServletRequest接口的作用

每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的Http协议信息解析好封装到Request对象中,然后传递到Service方法中去,我们可以通过HttpServletRequest对象获取到请求的信息

HttpServletRequest接口的常用方法

  • getRequestURI():获取请求的URI地址
  • getRquestURL():获取请求的绝对路径地址
  • getRemoteHost():获取客户端的ip地址
  • getHeader():获取指定的请求头信息
  • getMethod():获取请求方式
  • getAttribute():获取会话域数据
  • setAttribute():设置会话域数据
  • getRequestDispatcher():获取请求转发对象
  • getParameter():获取请求的参数

如何获取请求的参数

直接上代码:

  1. /head>
  2. <body>
  3. <form action="http://localhost:2233/JavaWeb_02/getLoginMessage" method="post">
  4. 用户名:<input type="text" name="username"/>
  5. 码:<input type="password" name="pwd">
  6. <input type="submit"/>
  7. </form>
  8. </body>
  9. </html>

以上定义了一个form表单,当我们点击提交按钮,就会将数据用户名和密码发送到指定的Servlet类,这里的action参数锁一下:http://localhost:2233/JavaWeb\_02/getLoginMessage
http://localhost:2233/JavaWeb\_02:表示当前的工程路径
/getLoginMessage:表示映射的Servler类

Servlet类的配置如下:

  1. <servlet>
  2. <servlet-name>GetLoginMessage</servlet-name>
  3. <servlet-class>com.hsf.servlet.GetLoginMessage</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>GetLoginMessage</servlet-name>
  7. <url-pattern>/getLoginMessage</url-pattern>
  8. </servlet-mapping>

Servlet类代码:

  1. package com.hsf.servlet;
  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. public class GetLoginMessage extends HttpServlet {
  8. @Override
  9. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  10. String username = req.getParameter("username");
  11. System.out.println("用户名:"+username);
  12. String pwd = req.getParameter("pwd");
  13. System.out.println("密码:" + pwd);
  14. }
  15. @Override
  16. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  17. //设置请求的字符集为utf-8,从而解决post请求的中文乱码问题
  18. //这句话是设置请求体重内容的编码方式,因为get请求没有请求体,所以该方式不适合get请求。
  19. req.setCharacterEncoding("utf-8");
  20. String username = req.getParameter("username");
  21. System.out.println("用户名:"+username);
  22. String pwd = req.getParameter("pwd");
  23. System.out.println("密码:" + pwd);
  24. }
  25. }

运行如下:
在这里插入图片描述

Request请求乱码的问题

本段选自kaka_1994的

https://blog.csdn.net/javakaka666/article/details/79950161
解决request中文乱码问题,要分成两种情况:get请求和post请求

1.Get //这里取到的值是iso编码过后的值, 是乱码。因为Tomcat中默认使用的是iso8859-1编码

  1. String username = request.getParameter("username");
  2. //这里使用ISO的编码, 先逆转回去,变成字节数据,然后在用U8的编码转成中文
  3. byte [] bytes = username .getBytes("ISO-8859-1");

username = new String(bytes, “utf-8”);

2.Post

//如果是Post方式提交的数据上来,解决乱码,一句话就可以了。

request.setCharacterEncoding(“UTF-8”); //这句话是设置请求体重内容的编码方式,因为get请求没有请求体,所以该方式不适合get请求。

请求转发的特点

客户端通过资源路径将请求发送给Servlet1,Servlet1拿到数据并对其进行处理,之后将请求转发给另一个Servlet2类,Servlet2类对参数进行处理再返回客户端
(画个图吧!)
在这里插入图片描述

以上,相信你应该已经对请求转发有一个大概的理解了,下面我们开始写代码:
我们先写一个form表单用来提交数据

  1. <form action="http://localhost:2233/JavaWeb_02/getLoginMessage" method="get">
  2. 用户名:<input type="text" name="username"/>
  3. 密 码:<input type="password" name="pwd">
  4. <input type="submit"/>
  5. </form>

然后,创建一个的Servlet类去进行第一次接收处理

  1. package com.hsf.servlet;
  2. import javax.servlet.RequestDispatcher;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. public class GetLoginMessage extends HttpServlet {
  9. @Override
  10. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  11. String username = req.getParameter("username");
  12. System.out.println("用户名:"+username);
  13. String pwd = req.getParameter("pwd");
  14. System.out.println("密码:" + pwd);
  15. if(username.equals("fufu")&&pwd.equals("123456")){
  16. //获取请求转发对象,这里的参数表示要转发的位置
  17. RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servletDemo1");
  18. req.setAttribute("name","金木研");
  19. requestDispatcher.forward(req,resp);
  20. }
  21. }

处理完之后在会话域中存入数据并将请求转发,这时候,第二个Servlet类接收到请求,并从会话域中拿到数据进行判断,结果为真,再进行其他操作,否则进行操作

  1. package com.hsf.servlet;
  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. public class ServletDemo1 extends HttpServlet {
  8. @Override
  9. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  10. String requestURI = req.getRequestURI();
  11. if(req.getAttribute("name").equals("金木研")) {
  12. System.out.println("获取请求的地址 => " + requestURI);
  13. StringBuffer requestURL = req.getRequestURL();
  14. System.out.println("获取请求资源的绝对路径 => " + requestURL);
  15. String remoteHost = req.getRemoteHost();
  16. System.out.println("获取客户端(发送请求的)的ip地址 => " + remoteHost);
  17. String header = req.getHeader("Accept");
  18. System.out.println("获取请求头的指定信息:=>" + header);
  19. String method = req.getMethod();
  20. System.out.println("获取请求的方式 =>" + method);
  21. }else{
  22. System.out.println(req.getAttribute("name"));
  23. }
  24. }

这里稍微提一下,存入会话域里的数据只在当前会话过程中有效,当我们切断会话是获取不到会话域里的数据的,所以会抛出NullpaintException异常,

以上,就是请求转发的全过程了!!!

2020-11-29 今日任务完成

  1. ————加油吧,代码人!

发表评论

表情:
评论列表 (有 0 条评论,198人围观)

还没有评论,来说两句吧...

相关阅读