<7>HttpServletRequest 类

本文详细介绍了HttpServletRequest在Servlet中的作用,包括常用方法如获取请求URI、URL、客户端IP、请求头、参数等。通过代码实例展示了如何获取表单数据,并针对GET、POST请求的中文乱码问题提供了处理方法。在GET请求中,需先以ISO8859-1编码再用UTF-8解码;在POST请求中,需设置请求体的字符集为UTF-8。
摘要由CSDN通过智能技术生成

1.HttpServletRequest 类的作用

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

2.HttpServletRequest 类的常用方法

  • getRequestURI()   获取请求的资源路径
  • getRequestURL()   获取请求的统一资源定位符(绝对路径)
  • getRemoteHost()   获取客户端的 ip 地址 iv. getHeader() 获取请求头
  • getParameter()   获取请求的参数
  • getParameterValues()   获取请求的参数(多个值的时候使用)
  • getMethod()   获取请求的方式 GET 或 POST
  • setAttribute(key, value);   设置域数据
  • getAttribute(key);   获取域数据
  • getRequestDispatcher()   获取请求转发对象

2.1.HttpServletRequest 类的常用方法代码实例

public class HelloServlet03 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        // getRequestURI() 获取请求的资源路径
        String requestURI = req.getRequestURI();
        System.out.println("URI => " +requestURI);
        
        // getRequestURL() 获取请求的统一资源定位符(绝对路径)
        StringBuffer requestURL = req.getRequestURL();
        System.out.println("URL => " +requestURL);

//        getRemoteHost() 获取客户端的 ip 地址
        String remoteHost = req.getRemoteHost();
        System.out.println("客户端 ip 地址 => " +remoteHost);

        // getHeader() 获取请求头
        System.out.println("请求头 User-Agent ==>> " + req.getHeader("User-Agent"));
        // getMethod() 获取请求的方式 GET 或 POST
        System.out.println( "请求的方式 ==>> " + req.getMethod() );
    }
}

实验结果:
在这里插入图片描述

2.2.获取表单数据

很多情况下,需要传递一些信息,从浏览器到 Web 服务器,最终到后台程序。
例,表单为:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8080/06_servlet/HelloServlet03" 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">JavaScript<br/>
    <input type="submit">
</form>
</body>
</html>

Java 代码:

public class HelloServlet03 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String[] hobbies = req.getParameterValues("hobby");

        System.out.println("用户名:" + username);
        System.out.println("密码:" + password);
        System.out.println("兴趣爱好:" + Arrays.asList(hobbies));
    }
}

2.3.解决GET、POST请求的中文乱码问题

doGet:

// 获取请求参数 
String username = req.getParameter("username");
 //1 先以 iso8859-1 进行编码 
 //2 再以 utf-8 进行解码 
username = new String(username.getBytes("iso-8859-1"), "UTF-8");

doPost:

// 设置请求体的字符集为 UTF-8,从而解决 post 请求的中文乱码问题 
req.setCharacterEncoding("UTF-8");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值