一:获取前端所有表单提交的数据,采用返回值是Map的形式。如果是ajax提交,提交封装的数据。
二:返回值只能读,不能修改。如果非要要修改,新建一个map对象。
三:泛型时采用Map<String,String[]>形式,为啥是String[]的形式呢?是为了防止名字相同,不同值得参数,例如checkbox。
例如:request中的参数t1=1&t1=2&t2=3形成的map结构:
key=t1;value[0]=1,value[1]=2
key=t2;value[0]=3
四:那怎么取出来呢?
迭代器法:
以下是HttpMapUtil工具中的一个函数,用来将map转成可操作的普通map
那么这种方式也只是取没有重复名字的数据,因为获得的是str【0】
public static Map<String,Object> reqParamterToMap(HttpServletRequest req){
Map<String, String[]> m=req.getParameterMap();
Map<String,Object> rm=new HashMap<String,Object>();
Iterator<String> itor=m.keySet().iterator();
while(itor.hasNext()){
String key=itor.next();
String[] strs=m.get(key);
String val=null;
if(strs.length>0){
val=strs[0];
}
rm.put(key, val);
}
return rm;
}
获取到所有值包括重复名字的数
Map<String, String[]> map = request.getParameterMap();
Set<Entry<String, String[]>> set = map.entrySet();
Iterator<Entry<String, String[]>> it = set.iterator();
while (it.hasNext()) {
Entry<String, String[]> entry = it.next();
System.out.println("KEY:"+entry.getKey());
for (String i : entry.getValue()) {
System.out.println(i);
}
}
注意,这个getvalue()可以直接获取到值,而不要通过名字。
浅谈request.getParameterName和request.getParameterVlaues用法
通过这两个方法也可以得到取出参数的功能
这种方式一般用于含有名字相同的值如checkbox(因为循环时,将里面String【】也循环了)
java.util.Enumeration enum=this.getRequest().getParameterNames();
while(enum.hasMoreElements()){
String paramName=(String)enum.nextElement();
String[] values=request.getParameterValues(paramName);
for(int i=0;i<values.length;i++){
System.out.println("["+i+"] "+paramName+" "+values[i]);
}
}
这种方式适用于取没有重复的值的表单
Enumeration enum =this.getRequest().getParameterNames();
while (enum.hasMoreElements()) {
String paramName = (String) enum.nextElement();
String paramValue = this.getRequest().getParameter(paramName);
//形成键值对应的map
map.put(paramName, paramValue);
}