Web项目(五)HttpServletRequest对象

HttpServletRequest 介绍

1. HttpServletRequest 对象代表客户端的请求

2. 当客户端/浏览器通过 HTTP 协议访问服务器时,HTTP 请求头中的所有信息都封装在这个对象中

3. 通过这个对象的方法,可以获得客户端这些信息

代码:

package com.test;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@WebServlet("/hsr01")
public class HttpServletRequest01 extends HttpServlet {

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

        HttpServletRequest req = (HttpServletRequest)servletRequest;
        StringBuffer url = req.getRequestURL();
        System.out.println("请求的URL1地址:"+ url + "<br/>");

        String uri = req.getRequestURI();
        System.out.println("请求的资源:"+ uri + "<br/>");

        String queryString = req.getQueryString();
        System.out.println("请求的URL地址中附带的参数:"+queryString + "<br/>");

        String pathInfo = req.getPathInfo();
        System.out.println("pathInfo:"+pathInfo + "<br/>");

        String remoteAddr = req.getRemoteAddr();
        System.out.println("客户机的IP地址:"+remoteAddr + "<br/>");

        String remoteHost = req.getRemoteHost();
        System.out.println("客户机的完整主机名:"+remoteHost + "<br/>");

        Integer remotePort= req.getRemotePort();
        System.out.println("客户机使用的网络端口号:"+remotePort + "<br/>");


    }

}

 req.getParameter方法

最重要的如何获取请求头的某一个参数呢,构造一个请求头,在url后边第一个参数使用?后边跟着参数名=参数值

127.0.0.1:8080/s/hsr01?name=zhangsan

  String name =   req.getParameter("name");
        System.out.println(name);

如果我要获取第二个参数怎么获取url怎么写 用&写

127.0.0.1:8080/s/hsr01?name=zhangsan&sex=woman

        String sex =   req.getParameter("sex");
        System.out.println(sex);

 getParameterValues方法,得到同一个参数的多个值

127.0.0.1:8080/s/hsr01?name=zhangsan&sex=woman&hobby=lanqiu&hobby=run

 String[] hos = req.getParameterValues("hobby");
        System.out.println(Arrays.toString(hos));

得到一个数组

请求乱码问题


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

方式一:

这种方式只针对 POST 有效(必须在接收所有的数据之前设定)

request.setCharacterEncoding("UTF-8");
1
方式二:

new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8")
1
借助了String 对象的方法,该种方式对任何请求有效,是通用的。

Tomcat8起,以后的GET方式请求是不会出现乱码的。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Allen019

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

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

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

打赏作者

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

抵扣说明:

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

余额充值