【问题标题】:ServletRequest.getParameterMap() returns Map<String, String[]> and ServletRequest.getParameter() returns String?ServletRequest.getParameterMap() 返回 Map<String, String[]> 并且 ServletRequest.getParameter() 返回 String?
【发布时间】:2025-12-08 07:30:01
【问题描述】:

谁能解释一下为什么ServletRequest.getParameterMap()返回类型

Map<String, String[]> 

ServletRequest.getParameter() 只返回类型String

我不明白为什么地图会映射到一个以上的值。 TIA。

【问题讨论】:

    标签: java servlets


    【解决方案1】:

    它返回具有相同名称的控件的所有参数值。

    例如:

    <input type="checkbox" name="cars" value="audi" /> Audi
    <input type="checkbox" name="cars" value="ford" /> Ford
    <input type="checkbox" name="cars" value="opel" /> Opel
    

    <select name="cars" multiple>
        <option value="audi">Audi</option>
        <option value="ford">Ford</option>
        <option value="opel">Opel</option>
    </select>
    

    任何选中/选定的值都将以:

    String[] cars = request.getParameterValues("cars");
    

    这对于表格中的多项选择也很有用:

    <table>
        <tr>
            <th>Delete?</th>
            <th>Foo</th>
        </tr>
        <c:forEach items="${list}" var="item">
            <tr>
                <td><input type="checkbox" name="delete" value="${item.id}"></td>
                <td>${item.foo}</td>
            </tr>
        </c:forEach>
    </table>
    

    结合

    itemDAO.delete(request.getParameterValues("delete"));
    

    【讨论】:

    • 感谢您的反馈。现在完全有道理。有时很容易错过明显的东西。我想这就是这个网站的用途:)。
    【解决方案2】:
    http://foo.com/bar?biff=banana&biff=pear&biff=grape
    

    “biff”现在映射到{"banana","pear","grape"}

    【讨论】:

      【解决方案3】:

      获取所有参数值的真正函数是

         request.getParameterValues();
      

      getParameter() 只是获得第一个的捷径。

      【讨论】:

        【解决方案4】:

        在多值控件(复选框、多选等)的情况下,request.getParameterValues(..) 用于获取值。

        【讨论】:

          【解决方案5】:

          如果您有一个多值控件,例如多选列表或一组映射到同名的按钮,则多个选择将映射到一个数组。

          【讨论】:

          • 我不确定是否看到按钮的值。在不错的浏览器中,它只会返回 pressed 按钮的值,而不是 all 按钮的值。