getSession().getParameter();getSession( ).getAttribute;getSession().removeAttribute()讲解

最近学习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()是获取POST/GET传递的参数值;  
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);
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是一个 Java 类,名为 UsersAction,继承自 PageActionBase。该类定义了一个 onLoad() 方法,用于处理请求。下面是每一行代码的解释: 1. `public class UsersAction extends PageActionBase {` 定义一个公共类 `UsersAction`,继承自 `PageActionBase` 类。 2. `public void onLoad() {` 定义一个公共的无返回值的方法 `onLoad()`,用于处理请求。 3. `String actiontype = request.getParameter("actiontype");` 获取请求参数中名为 "actiontype" 的值,并将其赋值给 `actiontype` 变量。 4. `System.out.println("actiontype=" + actiontype);` 输出 `actiontype` 变量的值到控制台。 5. `if (actiontype == null) return ;` 如果 `actiontype` 变量的值为 null,直接返回。 6. `if (actiontype.equals("login")) { login(); }` 如果 `actiontype` 变量的值等于 "login",调用 `login()` 方法。 7. `if (actiontype.equals("exit")) { exit(); }` 如果 `actiontype` 变量的值等于 "exit",调用 `exit()` 方法。 8. `private void exit() {` 定义一个私有的无返回值的方法 `exit()`,用于退出登录。 9. `Object u = request.getSession().getAttribute("adminuser");` 获取当前会话中名为 "adminuser" 的属性,并将其赋值给 `u` 变量。 10. `if (u != null) request.getSession().removeAttribute("adminuser");` 如果 `u` 变量不为 null,则从当前会话中删除名为 "adminuser" 的属性。 11. `try { request.getRequestDispatcher("/admin/login.jsp").forward(request, response); }` 尝试将请求转发到路径为 "/admin/login.jsp" 的 JSP 页面。 12. `catch (ServletException e) { e.printStackTrace(); }` 捕获可能抛出的 ServletException 异常,并输出异常信息到控制台。 13. `catch (IOException e) { e.printStackTrace(); } }` 捕获可能抛出的 IOException 异常,并输出异常信息到控制台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值