以一个用户登陆为例:
get提交:
/**
* 获取get提交的参数.(URI后面的参数数据)
*/
request.getQueryString();
得到结果是:user=1111&password=aaa
所以存在问题:
/**
* 问题:
* 1)获取到的参数数据,还需要进一步处理,获取参数值
* 2)两种提交方式的获取代码完全不一样的,不通用。
*/
解决:
/**
* 通用的获取参数的方法:(无论get和post可用)
* reuqest.getParameter(“name”) 获取一个值的参数
* request.getParameterValue(“name”) 获取多个值的参数
* request.getParameterNames() 获取所有参数名称
* request.getParameterMap() 获取所有参数对象
*/
System.out.println("++++++++++++++++");
Enumeration<String> en=request.getParameterNames();//获取所有参数名称,只是名称
while(en.hasMoreElements()){
String s1=en.nextElement();
System.out.println(en+" "+request.getParameter(s1));
}
//第三种
Map<String,String[]> map=request.getParameterMap(); //获取参数对象列名 (Map集合)
//遍历map,三种方式
//(1)
Set<Entry<String,String[]>> set=map.entrySet();
for(Entry<String,String[]> entry:set)
{
String key=entry.getKey();
String values[]=entry.getValue();
System.out.println(key+" "+values[0]);
}
//(2)获取所有键对象的Set集合
System.out.println("==========");
Set<String> keyset=map.keySet();//获取所有键对象的Set集合
for(String key1:keyset)
{通过键对象获取值对象
String value2[]=map.get(key1);
System.out.println(key1+" "+value2[0]);
}
//(3)values(): 获取所有值对象的Collection集合(只能获取值对象,不能获取键对象)
System.out.println("==========");
Collection<String[]> coll=map.values();
for (String[] value : coll) {
System.out.println(value[0]);
}
//根据参数名称获取多个参数值
以爱好的checkbox为例
String[] hobbit=request.getParameterValues(“hobbit”);
for(String h:hobbit)
System.out.println(h);
**但是用 System.out.println();输出存在一个乱码问题,所以要解码:
(1)post方式
request.setCharacterEncoding(“utf-8”);
/**
* 设置参数解码时查询的码表
* 注意:
* 只对post提交的参数有效,对get提交的参数无效的!
* 因为这个方法只能设置对请求实体内容的解码时查询的码表。post提交的参数时放在实体内容中,所以对post是有效的!
* 但是get提交参数时放在URI后面的,这个方法无法影响URI后面的内容。
*/
(2)get方式,必须进行手动解码
if(“GET”.equals(request.getMethod())){//只对get方法
name = new String(name.getBytes(“iso-8859-1”),”utf-8”);
}
其中name就是要进行输出的字符串
这两种解码方式都要放在方法的第一行(所有网页参数的前面)
通用获取参数方法,在get和post中都是一样的,所以如果在get和post中都写一遍很浪费,所以可以在post方法中,调用doGet(request,response)方法,解决