您的位置:程序门 -> java -> web 开发



求解request.getattribute()、急疯了!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求解request.getattribute()、急疯了![已结贴,结贴人:everbuie]
发表于:2007-09-11 17:20:05 楼主
对于request.getattribute、request.setattribute,的用法很困惑!
下面是一个简单的尝试,但是值的传递不能成功。

///*     test.jsp     *///

<%@   page   language= "java "   import= "java.util.* "   pageencoding= "gbk "   %>
<html>
<head>  
<title>   request.html </title>
</head>  
<body>
<form   action= "request.jsp "   method= "post ">  
name: <input   type= "text "   name= "name "   size= "20 "   maxlength= "20 "> <br>  
<%
string   attr   =   new   string( "about   setattribute. ");
request.setattribute( "data ",   attr);
%>
<input   type= "submit "   value= "传送 ">  
</form>  
</body>  
</html>

///*   request.jsp       *///

<%@   page   language= "java "   contenttype= "text/html;charset=gbk "   %>  

<html>  
<head>  
<title>   request.jsp </title>
</head>  
<body>  
<h2> test </h2>  
getparameter( "name "): <%=   request.getparameter( "name ")   %> <br>
<br>
<%
string   data   =   (string)request.getattribute( "data ");
%>
the   attribute: <%=data   %>
<br>
</body>  
</html>

///*输出结果*///

test
getparameter( "name "):something

the   attribute:null  

为什么没法传输attr的值。请求高人解救
帮忙解答一下request.get/getattribute的使用。万分感谢!


发表于:2007-09-11 17:24:191楼 得分:0
<%
string   attr   =   new   string( "about   setattribute. ");
request.setattribute( "data ",   attr);
%>
你把参数名data   改成data1   或者其他的   data有可能是个关键字
发表于:2007-09-11 17:24:542楼 得分:0
这样是没有的把,一般新的页面有新的请求把。。
发表于:2007-09-11 17:29:533楼 得分:0
你不用servlet吗
发表于:2007-09-11 17:31:004楼 得分:2
你request.setattribute( "data ",   attr);这样,只有当前请求才有效.
比如用forward(..)这样,在下一个页面,才可以访问...
而你这里用在对第二个页面的请求是一个新的请求.因为它是表单新提交的请求.
所以第二个页面访问不到属性   data,
你这样能用session.setattribute()可以访问
发表于:2007-09-11 17:44:475楼 得分:1
唉...很多人刚开始都会这样失败的!!!!

首先你在url里边输入test.jsp     的时候,服务器里边就会产生一个request,开始编译你的jsp文件,在这个过程,你在前面的某一处用了setattribute();在后边你可以用request.getattribute()取到.就像下边这样:
<%@   page   language= "java "   import= "java.util.* "   pageencoding= "gbk "   %>
<html>
<head>  
<title>   request.html </title>
</head>  
<body>
<form   action= "request.jsp "   method= "post ">  
name: <input   type= "text "   name= "name "   size= "20 "   maxlength= "20 "> <br/>  
<%
string   attr   =   new   string( "about   setattribute. ");

request.setattribute( "data ",   attr);========================> //前
%>
<input   type= "submit "   value= "传送 ">  
</form>  

<%

out.println(request.getattribute( "data "));========================> 后


%>
</body>  
</html>
最后服务完成了编译的工作,完成生成了html代码,并把它们返回给浏览器去执行,服务器上的那个request已经不存在,所有与它一起的数据都没有了.

返回给客户端后,我们就看到了一个表单,然后点击 "传送 ",再次访问服务上的request.jsp,这时候又产生了一个新的request对像,但以前的那个数据已经不存在了,因为是不同的request了.所以你在request.jsp里边再取它,那是当然取不到的了.setattribute()是针对同一次服务器的访问的,第一次访问成功后我们看到了表单,点击 "传送 "后,发生了第二次与服务器的请求,产生了新的request
发表于:2007-09-11 17:50:006楼 得分:0
楼上正解~!!
发表于:2007-09-11 18:06:107楼 得分:0
request范围下的属性只有在一个请求紧接另一个请求的情况下,值才存在
如过你在第一个页面设置值,然后用foward标签或用与foward方法
将他转到第2个页面,就能得到值
而你的第一个页面先设置值,然后等到用户的输入后才转到第2个页面,
在这段时间这个值早已被系统淡忘了
呵呵
发表于:2007-09-11 18:12:138楼 得分:0
你的request   对象已经改变了
你仔细看一下jsp的几个隐式对象
特别是他们的范围
发表于:2007-09-11 18:12:469楼 得分:0
哇,我刚没看到楼上的大哥哥发的,
看了觉的晓得不发了
嘿嘿
楼上的说的很有道理的啊,楼主
发表于:2007-09-11 18:37:1610楼 得分:0
用session.setattribute( "data ",   attr);

能达到你的目的
发表于:2007-09-11 18:42:5711楼 得分:0
request是同一请求才有效的,但是你从一个页面跑到另外一个页面的话就得想想用session作用域保存值了。这样就保存在ie缓存里面了。
发表于:2007-09-11 20:28:2312楼 得分:2
你试试在request.setattribute( "data ",   attr);后加上这句行不行?
request.getrequestdispatcher( "request.jsp ").forward(request,response);
我只知道这句在servlet里可以


快速检索

最新资讯
热门点击