Request获取请求参数的通用方法

本文介绍了一种通用方法,用于在Java Servlet中无论是GET还是POST请求,都能统一处理请求参数。通过使用getParameter系列方法,如getParameter, getParameterValues等,可以方便地获取和处理各种请求参数,实现代码复用。

从这里Request获取请求数据实例我们可以了解到,get请求和post请求获取请求参数有着不一样的方法,这对我们的封装很不方便,下面就介绍一种获取请求参数的通用方法

  • String getParameter(String name):根据参数名称获取参数值
  • String[] getParameterValues(String name):根据参数名称获取参数值的数组
  • Enumeration<String> getParameterNames():获取所有请求的参数名称
  • Map<String,String[]> getParameterMap():获取所有参数的map集合

写一个例子,因为方法是通用的,所以不管是get请求,还是post请求,都是一样的,所以为了测试,我们在get请求里调用post请求的方法

package com.lingaolu.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author 林高禄
 * @create 2020-07-07-12:06
 */
@WebServlet("/requestDemo3")
public class RequestDemo3 extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("post请求------------------------------------------------------------");
        String name = request.getParameter("name");
        System.out.println("名字为:"+name);
        System.out.println("爱好为:");
        String[] loves = request.getParameterValues("love");
        Stream.of(loves).forEach(System.out::println);
        System.out.println("所有的请求参数名称为:");
        Enumeration<String> parameterNames = request.getParameterNames();
        while (parameterNames.hasMoreElements()){
            String s = parameterNames.nextElement();
            System.out.println(s);
        }
        System.out.println("所有的请求参数为:");
        Map<String, String[]> parameterMap = request.getParameterMap();
        parameterMap.forEach(
                (key,value)->System.out.println(key+": "+Stream.of(value).collect(Collectors.joining(",", "", "")))
        );
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("get请求---------------------------------------------------------");
        String name = request.getParameter("name");
        System.out.println("名字为:"+name);
        System.out.println("爱好为:");
        String[] loves = request.getParameterValues("love");
        Stream.of(loves).forEach(System.out::println);
        System.out.println("所有的请求参数名称为:");
        Enumeration<String> parameterNames = request.getParameterNames();
        while (parameterNames.hasMoreElements()){
            String s = parameterNames.nextElement();
            System.out.println(s);
        }
        System.out.println("所有的请求参数为:");
        Map<String, String[]> parameterMap = request.getParameterMap();
        parameterMap.forEach(
                (key,value)->System.out.println(key+": "+Stream.of(value).collect(Collectors.joining(",", "", "")))
        );
        this.doPost(request,response);
    }
}

Postman请求,get请求,参数为2个nam,一个age,两个love

后台输出

get请求---------------------------------------------------------
名字为:lin
爱好为:
aa
bb
所有的请求参数名称为:
name
age
love
所有的请求参数为:
name: lin,cc
age: 27
love: aa,bb
post请求------------------------------------------------------------
名字为:lin
爱好为:
aa
bb
所有的请求参数名称为:
name
age
love
所有的请求参数为:
name: lin,cc
age: 27
love: aa,bb

虽然有2个name,但是getParameter获取到的是第一个name

<think>我们正在讨论如何使用request对象获取HTTP请求参数。根据提供的引用内容,我们可以总结出几种通用方法。 引用[1]中提到了一些通用方法: - String getParameter(String name):根据参数名称获取参数值 - String[] getParameterValues(String name):根据参数名称获取参数值的数组(用于多值参数,如复选框) - Enumeration<String> getParameterNames():获取所有请求参数名称 - Map<String,String[]> getParameterMap():获取所有参数的map集合 引用[2]中提到了获取请求行和请求头的方法,但这里我们关注请求参数,所以主要参考引用[1]和引用[3]。 引用[3]展示了一个JSP页面中的表单,表单提交到"/jsp/RequestDemo5",方法可以是GET或POST。在后台,我们可以使用上述通用方法获取参数。 因此,无论请求是GET还是POST,我们都可以使用以下方法获取参数: 1. 获取单个参数值(当参数只有一个值时): String username = request.getParameter("username"); 2. 获取多个参数值(例如复选框,同一参数名对应多个值): String[] hobbies = request.getParameterValues("hobby"); 注意:如果参数只有一个值,这个方法返回一个长度为1的数组。 3. 获取所有参数名称: Enumeration<String> parameterNames = request.getParameterNames(); 然后我们可以遍历这个枚举,获取每个参数名,再通过getParameter或getParameterValues获取值。 4. 获取所有参数的Map: Map<String, String[]> parameterMap = request.getParameterMap(); 这个Map的键是参数名,值是字符串数组(即使只有一个值也是数组)。 下面是一个示例,展示如何使用这些方法: 示例(Java Servlet中): protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取单个参数 String username = request.getParameter("username"); String password = request.getParameter("password"); // 获取多值参数(例如复选框) String[] hobbies = request.getParameterValues("hobby"); // 获取所有参数名 Enumeration<String> paramNames = request.getParameterNames(); while (paramNames.hasMoreElements()) { String name = paramNames.nextElement(); String[] values = request.getParameterValues(name); // 处理每个参数的值 } // 或者直接获取整个参数Map Map<String, String[]> paramMap = request.getParameterMap(); for (Map.Entry<String, String[]> entry : paramMap.entrySet()) { String name = entry.getKey(); String[] values = entry.getValue(); // 处理 } } 同样,对于POST请求,我们可以在doPost方法中使用相同的方法获取参数。 注意:对于POST请求,如果参数是通过表单提交且编码不是UTF-8,可能需要设置请求字符编码(如request.setCharacterEncoding("UTF-8"))以避免乱码。 引用[1]和[2]提供了基础的方法说明,引用[3]提供了一个简单的表单示例。 因此,使用request获取请求参数方法是统一的,不区分GET和POST(在获取参数方法上),但需要注意POST请求的编码问题。 </think>### 使用Request获取请求参数方法 在Java Web开发中,`HttpServletRequest`对象提供了统一的方法获取请求参数,无论请求方式是GET还是POST。以下是核心方法总结: #### 1. **获取单个参数值** ```java String username = request.getParameter("username"); // 返回字符串 ``` - 用于获取单值参数(如文本框、密码框) - 参数名不存在时返回`null` - 同名参数只返回第一个值 #### 2. **获取多值参数** ```java String[] hobbies = request.getParameterValues("hobby"); // 返回字符串数组 ``` - 用于获取多值参数(如复选框、多选框) - 示例:`request.getParameterValues("hobby")`可获取["game", "study"] #### 3. **获取所有参数名** ```java Enumeration<String> paramNames = request.getParameterNames(); // 返回枚举 while(paramNames.hasMoreElements()) { String name = paramNames.nextElement(); // 处理参数名 } ``` #### 4. **获取参数Map集合** ```java Map<String, String[]> paramMap = request.getParameterMap(); // 返回Map for(Map.Entry<String, String[]> entry : paramMap.entrySet()) { String name = entry.getKey(); String[] values = entry.getValue(); // 处理参数 } ``` - 键:参数名(String) - 值:参数值数组(String[]) ### 使用示例 假设表单包含: ```html <form action="/submit" method="post"> <input type="text" name="username"> <input type="password" name="password"> <input type="checkbox" name="hobby" value="game">游戏 <input type="checkbox" name="hobby" value="study">学习 </form> ``` Servlet处理代码: ```java protected void doPost(HttpServletRequest request, HttpServletResponse response) { // 获取单值 String user = request.getParameter("username"); String pwd = request.getParameter("password"); // 获取多值 String[] hobbies = request.getParameterValues("hobby"); // 遍历所有参数 Map<String, String[]> params = request.getParameterMap(); params.forEach((key, values) -> { System.out.println(key + ": " + Arrays.toString(values)); }); } ``` ### 注意事项 1. **GET vs POST** - GET:参数在URL中可见(`getQueryString()`获取) - POST:参数请求体中(需通过`getParameter()`获取) - **两者均可使用相同方法获取参数** 2. **编码处理** - POST请求需设置字符编码防乱码: ```java request.setCharacterEncoding("UTF-8"); ``` 3. **空值处理** - 使用前检查`null`值: ```java if(request.getParameter("name") != null) { ... } ``` 这些方法由Servlet API提供,无需额外依赖库[^1][^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

林高禄

你打不打赏,我都会一直写博客

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

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

打赏作者

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

抵扣说明:

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

余额充值