HttpServletRequest

发布于:2025-07-01 ⋅ 阅读:(24) ⋅ 点赞:(0)

HttpServletRequest是什么

HttpServletRequest是一个接口,其父接口是ServletRequest

HttpServletRequest是Tomcat将 请求报文 转换封装而来的对象        (即请求报文的信息)

,在Tomcat调用service方法时传入

HttpServletRequest 代表客户端发来的请求,所有请求中的信息都可以通过该对象获得

一、功能概述

在 Servlet 的 service 方法中,通过 HttpServletRequest 对象获取请求参数,支持单值参数、多值参数获取,以及遍历所有参数 。

1. 请求头 请求体


        /*
       URI  统一资源标识符   interface URI{}   资源定位的要求和规范
       URL  统一资源定位符   class URL implements URI{}  一个具体的资源路径
        *    URI    /demo03/a.html
        *    URL  http://ip:port/demo03/a.html
        */

    代码

     @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //行信息相关     请求方式  get\post  ,请求的url , 协议及版本  http/1.1
    
            System.out.println(req.getMethod()); //获取请求方式
            System.out.println(req.getScheme());//获取协议
            System.out.println(req.getProtocol());//获取协议及版本
            System.out.println(req.getRequestURI());//获取请求的URI       项目的资源路径
            System.out.println(req.getRequestURL()); //获取请求的URL      项目的资源的完成路径
    
    
            /*
           URI  统一资源标识符   interface URI{}   资源定位的要求和规范
           URL  统一资源定位符   class URL implements URI{}  一个具体的资源路径
            *    URI    /demo03/a.html
            *    URL  http://ip:port/demo03/a.html
            */
    
    
            System.out.println(req.getLocalPort()); // 本应用容器的端口号  8080
            System.out.println(req.getServerPort()); // 客户端发请求时使用的端口号
            System.out.println(req.getRemotePort()); // 客户端软件的端口号
    
    
            // 请求头信息相关    key: value
    
            //获取所有请求头的名称
            Enumeration<String> headerNames = req.getHeaderNames();
            while (headerNames.hasMoreElements()) {
                String name = headerNames.nextElement();
                System.out.println(name+":"+req.getHeader(name));
            }
    }

    2.获取所有请求参数

    (一)单值参数获取

    // 根据参数名获取单个参数值,适用于像用户名、密码这类一般单个值的参数
    String username = req.getParameter("username");
    System.out.println(username);
    String userPwd = req.getParameter("userPwd");
    System.out.println(userPwd);

    req.getParameter("参数名"):从请求中根据参数名获取对应值,若参数不存在返回 null ,常用于获取文本框、单选框等单个值的表单数据 

    二)多值参数获取

    // 根据参数名获取多个参数值,
    String[] 数组名= req.getParameterValues("参数名");
    
    System.out.println(Arrays.toString(数组名));
    

    • req.getParameterValues("参数名"):获取同名参数的多个值,返回字符串数组 。若参数不存在,返回 null ;若只有一个值,数组长度为 1 ,适合处理复选框等多值表单元素 。

    (三)遍历所有参数

    // 获取所有参数名的枚举,遍历枚举来获取每个参数的名和值
    Enumeration<String> pnames = req.getParameterNames();
    while (pnames.hasMoreElements()) {
        String pname = pnames.nextElement();
        String[] values = req.getParameterValues(pname);
        if (values.length > 1) {
            System.out.println(pname + "=" + Arrays.toString(values));
        } else {
            System.out.println(pname + "=" + values[0]);
        }
    }
    

    • req.getParameterNames():获取请求中所有参数名的枚举对象 。通过遍历枚举,结合 getParameterValues ,可处理所有参数,根据值的数量(单值 / 多值)格式化输出 ,能全面了解请求携带的参数情况 。
    
    // 返回所有参数的map集合  key = 参数名  value = 参数值
    Map<String, String[]> parameterMap = req.getParameterMap();
    Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();
    for (Map.Entry<String, String[]> entry : entries) {
        String pname = entry.getKey();
        String[] value = entry.getValue();
        if(value.length>1){
            System.out.println(pname+"="+Arrays.toString(value));
        }else{
            System.out.println(pname+"="+value[0]);
        }
    
    }