前台传的表单的代码:
<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进行取长度,根据索引取值是会报空指针异常;