浅谈Javaweb中request的tAttribute()⽤法
在两个JSP代码⽚中有这样两端程序:
JSP1代码
天人合一英文String [] test=new String[2];
test[0]="1";
test[1]="2";
request.tAttribute("test",test) ;
respectfulrespon.ndRedirect("jsp2.jsp");
JSP2代码bourgeoisie
原声英语电影</pre><pre name="code" class="java">String test[]=(String[])Attribute("test");
out.print(test);谷歌英文
但是,问题来了:为什么JSP2 中test获取不到呢?
其实那就要从request的⽣命周期或者是说作⽤范围说起了,tAttribute()⽤来在同⼀个request周期中保存变量使⽤。
⽐如rvlet调⽤后,引出JSP页⾯,这是⼀个request周期。如果在Jsp页⾯需要rvlet中的⼀些处理结构,就从Attribute中获取。
⽽ndRedirect()⽅法是通过浏览器重定向的,所以第⼆个JSP页⾯中获得的request并⾮是前⼀个页⾯的request(两次请求⽣成了前后两个不同的 request对象了)。imagine是什么意思
call it a day⽽此时使⽤RequestDispatcher接⼝的forward()⽅法则能够得到request中的对象了,这是因为后者并不是使⽤客户端浏览器进⾏重定向的,从函数的名字就可以看出,RequestDispatcher.forward()就是从服务器端进⾏任务转发。
ndRedirect()是请求从定向,和超连接是⼀个意思,⽐如你在A页⾯中写⼀个request.tAtribute,ndRedirect到B页⾯,就是说服务器从A 页⾯中给你⼀个respon,然后你的浏览器再去request到B页⾯,由于有两次request和respon,是不能在B页⾯取到request.tAtribute⾥的值,能从地址栏看到url的改变。
rizzo
shells
request.tAtribute,RequestDispatcher().forward(request,respon)到B页⾯,那就是说服务器给你的respon是B页⾯的,并且只有⼀次request和respon,所以是能在B页⾯取到request.tAtribute⾥的值,地址栏的url仍然是A页⾯的。
所以通常情况下,tAttribute()⽅法都和RequestDispatcher.forward()都在⼀起使⽤,具体⽤法⽰例:
List list = new CommonsDao().getAllCommons();
request.tAttribute("CommonsList", list);
顺便谈⼀谈 Attribute()与request.tAttribute()
其实表单控件中的Object的 name与value是存放在⼀个哈希表中的,所以在这⾥给出Object的name会到哈希表中找出对应它的value。
⽽不同页⾯间传值使⽤request.tAttribute(position, nameOfObj)时,只会从a.jsp到b.jsp⼀次传递,之后这个request 就会失去它的作⽤范围,再传就要再设⼀个 request.tAttribute()。⽽使⽤ssion.tAttribute()会在⼀个过程中始终保有这个值。
P.S.:JavaScript与JSP中不能相互传值,因为JavaScript运⾏在客户端,⽽JSP运⾏在服务器端。若想使它们之间可以相互传递参数,可以在JSP中设置⼀个hidden控件,⽤它的value结合上⾯所说的⽤法来传递所需的数值。