Servlets HTTPServletRequest getParameterMap()与getParameterNames

Servlets HTTPServletRequest getParameterMap()与getParameterNames,servlets,http-request-parameters,Servlets,Http Request Parameters,HTTPServletRequestreq有一个方法getParameterMap()但是,对于post数据,值返回一个String[],而不是String name=Marry&lastName=John&Age=20岁 我在post数据中看到它不是一个数组,而是getParameterMap()为每个键(name或lastName或Age)返回数组。对于如何更好地理解这一点,有什么建议吗 该代码在方法2中可用。方法1工作得很好 方法1: Enumeration parameterNames=

HTTPServletRequest
req有一个方法
getParameterMap()
但是,对于post数据,值返回一个
String[]
,而不是
String

name=Marry&lastName=John&Age=20岁

我在post数据中看到它不是一个数组,而是
getParameterMap()
为每个键(name或lastName或Age)返回数组。对于如何更好地理解这一点,有什么建议吗

该代码在方法2中可用。方法1工作得很好

方法1:

Enumeration parameterNames=req.getParameterNames();
while(parameterNames.hasMoreElements()){
字符串键=(字符串)parameterNames.nextElement();
字符串val=req.getParameter(键);
System.out.println(“A=值”);
}
方法2:

Map allMap=req.getParameterMap();
for(字符串键:allMap.keySet()){
String[]strArr=(String[])allMap.get(key);
用于(字符串val:strArr){
System.out.println(“Str数组=“+val”);
}
}

如果需要预先确定的参数,则可以使用
getParameter(java.lang.String name)
方法

否则,可以使用上面给出的方法,但有一些区别,在HTTP请求中,有人可以发送一个或多个名称相同的参数

例如:

name=John, name=Joe, name=Mia
只有当您希望客户端只为名称发送一个参数值时,才能使用方法1,其余的参数值将被忽略。在本例中,您只能阅读“John”

如果您希望有多个同名值,可以使用方法2。值将填充为一个数组,如代码中所示。因此,您将能够读取所有值,即本例中的“John”、“Joe”、“Mia”


谢谢,您能用一些适合方法1和2的post数据示例进行解释吗?当我尝试以下url时,我得到一个映射成员(键:r),它是一个包含两个元素的数组[12398734]。经常“丢失”。是的,你可以(很好)拥有?myQueryStringNameOne=aaa&myQueryStringNameOne=bbb&myQueryStringNameOne=ccc