request.getParameterMap()返回的Map详解

前台传的表单的代码:

<form action="dd.action" method="post">
		username:<input name="username"><br> password: <input
			name="password" type="password"><br> <input
			type="submit" value="submit">
	</form>
前台传两个参数:username与password

后台servlet代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println(request);
		Map<String, String[]> parameterMap = request.getParameterMap();
		System.out.println("parameterMap:" + parameterMap);
		System.out.println(parameterMap.getClass().getName());
		System.out.println(parameterMap.size());
		String[] usernameArray = parameterMap.get("username");
		System.out.println("参数数组的长度:" + usernameArray.length);
		String[] passwordArray = parameterMap.get("password");
		System.out.println("参数数组的长度:" + passwordArray.length);
		System.out.println(passwordArray[0]);
		if (passwordArray[0].equals("")) {
			System.out.println("参数数组第一个是空字符串");
		}
		String[] o3 = parameterMap.get("passwd");
		System.out.println(o3);
	}
前面username的值填zhangsan,password的值什么都不填,则打印结果:

org.apache.catalina.connector.RequestFacade@43c404b2
parameterMap:{username=[Ljava.lang.String;@57102489, password=[Ljava.lang.String;@64cecb06}
org.apache.catalina.util.ParameterMap
2
参数数组的长度:1
参数数组的长度:1

参数数组第一个是空字符串
null

分析结论:

1.  打印的对象实际上是org.apache.catalina.connector.RequestFacade对象,此类是 javax.servlet.http.HttpServletRequest的实现类(在catalina.jar包中);

2.  request.getParameterMap()返回的Map的实际类型是org.apache.catalina.util.ParameterMap,此类也在catalina.jar包中;

3.  从requestMap中取存在的参数对应的参数值数组,永远不会是null。如果前端没有传参数值过来,此时参数值数组的长度也是大于0,第一个值是空字符串。如果前端有传参数值过来,此参数值数组的一个值就是前端传的参数值。排除复选框等

4.  如果从requestMap中取不存在的参数对应的参数值数组,不会报异常,会返回null,但如果对null进行取长度,根据索引取值是会报空指针异常;

你可能感兴趣的:(request.getParameterMap()返回的Map详解)