ServletRequest.getParameterMap() возвращает Map <String, String []> и ServletRequest.getParameter() возвращает String?

Может кто-нибудь объяснить мне, почему ServletRequest.getParameterMap() возвращает тип

Map<String, String[]> 

ServletRequest.getParameter() просто возвращает тип String

Я не понимаю, почему карта когда-либо будет отображать более одного значения. ТИА.

Ответ 1

Он возвращает все значения параметров для элементов управления с именем same.

Например:

<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

Если у вас есть многозначный элемент управления, например многосерийный список или набор кнопок, сопоставленных с одним и тем же именем, несколько выборов будут отображаться в массиве.