最近学习Java的WEB开发,遇到Request中相关的getParameter方法问题。在网上找了一下。自己整理,以备以后查用。
实例:
SQLQuery query = this.getSession().createSQLQuery("delete from tab where groupId=? and expertsid in (?)");
query.setParameter(0, groupId);
query.setParameter(1, expertIds);
上面setParameter用法是给问号(
占位符)赋值;
现在的问题是,groupId是单个id,比如说是123456,这个没有问题,但是后面的那个in里面改怎么设置参数,比如说现在有两个id分别是234和456,那么expertids该是一个什么样的字符串。
就事说执行的sql语句应该是
delete from tab where groupId=123456'' and expertsid in ('234','456');
改成下面这样就可以了:
SQLQuery query = this.getSession().createSQLQuery("delete from tab where groupId=:griupId and expertsid in (:expertsid)");
query.setParameter(griupId, groupId);
List list=new ArrayList();
list.add(“234”);
list.add(“456”);
query.setParameterList(“:expertsid”,list);
setParameter
List可以添加集合
getParameter得到的都是String类型的。或者是用于读取提交的表单中的值(http://a.jsp?id=123中的123),或者是某个表单提交过去的数据;
getAttribute则可以是对象Object,需进行转换,可用setAttribute设置成任意对象,使用很灵活,可随时用;getAttribute()是获取对象容器中的数据值;
request.getSession().setAttribute() 是给SESSION赋值;
request.getSession().getAttribute() 是获取SESSION的值;
request.getSession().removeAttribute() 是移出SESSION的值;
举例说明:
public String getAllDw(HttpServletRequest request){
String str ="张三";
request.getSession().setAttribute("name", str);//给name赋值张三
request.getSession().getAttribute("name"); //获取name值
request.getSession().removeAttribute("name"); //清除name的值
}
getParameter:用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或url重定向传值时接收数据用。
getAttribute:用于服务器端重定向时,即在sevlet中使用了forward函数,或struts中使用了mapping.findForward。getAttribute只能收到程序用setAttribute传过来的值。
setAttribute 是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样getAttribute就能取得你所设下的值,当然这种方法可以传对象。session也一样,只是对象在内存中的生命周期不一样而已。
getParameter只是应用服务器在分析你送上来的request页面的文本时,取得你设在表单或url重定向时的值。
request.getParameterValues与request.getParameter的区别
简单的对比
request.getParameter用的比较多,相对熟悉
request.getParameterValues(String name)是获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkobx类型
request.getParameter(String name)是获得相应名的数据,如果有重复的名,则返回第一个的值 . 接收一般变量 ,如text类型
例:
1. 三个名字相同的text标签
<input type="text" name="test" value="1" />
<input type="text" name="test" value="2" />
<input type="text" name="test" value="3" />
request.getParameterValues("test") ----------------- [1, 2, 3]
request.getParameter("test") ------------------ 1
${paramValues.test}
${param.test}
2. checkbox
<input type="checkbox" name="habit" value="read">看书
<input type="checkbox" name="habit" value="movie">电影
<input type="checkbox" name="habit" value="game">游戏
request.getParameterValues("habit")
HttpServletRequest类既有getAttribute()方法,也由getParameter()方法;
HttpServletRequest类有setAttribute()方法,而没有setParameter()方法;
从更深的层次考虑,request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回String类型的数据。
request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部,在具有转发关系的Web组件之间共享。这两个方法能够设置Object类型的共享数据。
PS:
当利用request.getParameter得到Form元素的时候,默认情况的字符编码为ISO-8859-1 ,这种编码不能正确地显示汉字。目前有两种解决方法,一种是在执行操作之前,设置request的编码格式,语法是“request.setCharacterEncoding("GBK");”。另一种方法是转换字符编码,语法为:
<%String str=request.getParameter("boy");
byte b[ ]=str.getBytes("ISO-8859-1");
str=new String(b);