ServletRequest.getParameterMap()返回Map <String,String >和ServletRequest.getParameter()返回String?

有人可以向我解释为什么ServletRequest.getParameterMap()返回types

 Map<String, String[]> 

ServletRequest.getParameter()只是返回Stringtypes

我不明白为什么地图会映射到更多的值。 TIA。

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

例如:

 <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"); 

这对表中的多项select也很有用:

 <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")); 
 http://foo.com/bar?biff=banana&biff=pear&biff=grape 

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

获取所有参数值的实际函数是

  request.getParameterValues(); 

getParameter()只是获取第一个的快捷方式。

在多值控件(checkbox,多选等)的情况下,使用request.getParameterValues(..)来获取值。

如果您有一个多值select列表或一组button映射到相同的名称多select将映射到一个数组。