HttpServletRequest对象

本文详细介绍了HttpServletRequest对象在Servlet中的使用,包括如何通过Service方法获取请求URL、URI、请求方式、参数等信息。同时,文章讨论了处理中文乱码问题的两种方法,分别是设置请求的字符编码和通过编码转换还原。最后,举例展示了处理GET请求参数和POST请求参数的方法。
摘要由CSDN通过智能技术生成

HttpServletRequest对象

HttpServletRequest对象介绍

HttpServletRequest 对象:主要作用是用来接收客户端发送过来的请求信息,例如:请求的参数,发送的头信息等 都属于客户端发来的信息,service()方法中形参接收的是 HttpServletRequest 接口的实例化对象,表示该对象主要 应用在 HTTP 协议上,该对象是由 Tomcat 封装好传递过来。

HttpServletRequest 是 ServletRequest 的子接口,ServletRequest 只有一个子接口,就HttpServletRequest。 既然只有一个子接口为什么不将两个接口合并为一个? 从长远上讲:现在主要用的协议是 HTTP 协议,但以后可能出现更多新的协议。若以后想要支持这种新协议,只需要 直接继承 ServletRequest 接口就行了。

在 HttpServletRequest 接口中,定义的方法很多,但都是围绕接收客户端参数的。但是怎么拿到该对象呢?不需 要,直接在 Service 方法中由容器传入过来,而我们需要做的就是取出对象中的数据,进行分析、处理。

Service方法使用

Service方法主要是通过调用get(),post()等方法到响应客户端的请求。可以直接重写Service方法,也可以只重写各个请求类型对应的方法

接收方法常用的方法

  • getRequestURL()

    获取客户端发出的请求时的完整URL

  • getRequestURI()

    获取请求行中的资源部分名称(项目名称开始)

  • getQueryString()

    获取请求行中的参数部分

  • getMethod()

    获取客户端的请求方式

  • getProtocol()

    获取HTTP版本号

  • getContextPath()

    获取webapp名字

例子

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   //获取URL
    String URL = request.getRequestURI().toString();
    System.out.println("URL = " + URL);
    //获取URI
    String URI = request.getRequestURI();
    System.out.println("URI = " + URI);
    //获取请求方式
    String Method = request.getMethod();
    System.out.println("Method = " + Method);
    //获取参数部分
    String param = request.getQueryString();
    System.out.println("Param = " + param);
    //获取Http的版本号
    String Version = request.getProtocol();
    System.out.println("Version = " + Version);
    //获取项目名
    String Project = request.getContextPath();
    System.out.println("Project name = " + Project);
}

输入localhost:8080/study/tmp?name = tom&age = 10

打印结果为

URL = /study/tmp
URI = /study/tmp
Method = GET
Param = name%20=%20tom&age%20=%2010
Version = HTTP/1.1
Project name = /study

注意

这里出现了字符%20这是空格的ASC码的16进制数

重点: 获取请求中的参数

  • getParameter(name) //获取参数name 的值

            String name = request.getParameter("name");
            System.out.println(name);
    
  • getParametersValues(name) //获取name的所有值

    String[] parameters = request.getParameterValues("age");
    if (parameters == null) return;
    for(String tmp : parameters){
        System.out.print(tmp + "    ");
    }
    

处理请求中含有中文的乱码问题

由于现在的 request 属于接收客户端的参数,所以必然有其默认的语言编码,主要是由于在解析过程中默认使用的编 码方式为 ISO-8859-1(此编码不支持中文),所以解析时一定会出现乱码。要想解决这种乱码问题,需要设置 request 中的编码方式,告诉服务器以何种方式来解析数据。或者在接收到乱码数据以后,再通过相应的编码格式还原。

  • 方法一: 通过setCharacterEncoding(“UTF-8”)这种方法只针对POST请求有效

    在获取参数之前加上request.setCharacterEncoding(“UTF-8”)

  • 方法二:借助了String 对象的方法,该种方式对任何请求有效,是通用的。

    这种方法是通用的但是也不能乱用,如果编码正确,可能反而转换成了错误的编码。

    同过new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8");

GET方法在Tomcat8以后就不会出现乱码的情况。所以不用管GET请求乱码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuming先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值