HttpServletRequest初识

介绍
1.HttpServletRequest接口来自servlet规范,存在于tomcat的servlet-api.jar
2.由tomcat负责提供
作用
1.读取http请求协议包中请求行、请求头、请求体信息
2.可以代替浏览器向http服务器申请资源调用

请求行:请求方法,请求URL
HttpServletRequest初识

请求头
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:主机地址
HttpServletRequest初识

如果是post请求有请求体,get没有,把请求参数放在请求头中
post方法中,会把数据以key value形式发送请求
HttpServletRequest初识

生命周期:
诞生: 服务器端接收到请求的时候,创建。
销毁: service方法执行完毕,也就是响应结束, 对象销毁。

api 调用

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //方法
        String method = req.getMethod();
        //url
        String url = req.getRequestURL().toString();
        //url除去请求地址前的内容
        String uri = req.getRequestURI();

        //获取所有的请求内容
        Enumeration<String> parameterNames = req.getParameterNames();
        while (parameterNames.hasMoreElements()) {
            //key
            String paramName = parameterNames.nextElement();
            System.out.println(paramName);
            //value
            String paramValue = req.getParameter(paramName);
            System.out.println(paramValue);
        }
    }

问题描述:
以get方式发送中文参数内容,得到正常结果
以post方式发送中文参数内容,得到是乱码
原因:

浏览器已get方式发送请求,请求参数保存在请求头中,http请求协议包达到http服务器之后,第一件事就是解码
请求头二进制内容是由tomcat负责解码,tomcat9.0默认使用utf-8字符集
浏览器已post方式发送请求,请求参数保存在请求体,在http请求协议包达到http服务之后,第一件事就是解码
请求体二进制内容由当前请求对象request负责解码,request默认使用iso-8859-1字符集,一个东欧语系字符集,所以乱码
解决方案
req.setCharacterEncoding(“utf-8”);

上一篇:java获取HttpServletRequest 的客户端ip


下一篇:HttpServletResponse应用(一)---解决中文乱码问题