您的位置:首页 > 产品设计 > UI/UE

request.setAttribute

2009-09-10 16:04 309 查看
request.setAttribute("name" "hello");进行设置,以后再进入此页面a.jsp的时候则直接用request.getAttribute("name");取得hello字符串,请问怎么实现啊?
我这样实现达不到效果:

String s1 ="";
if (request.getAttibute("name")==null) {
request.setAttribute("name" "hello");
} else {
s1 = request.getAttribute("name");
}
;

以上是在同一个请求时有效!一般用于请求转发!

分清楚以下对象的作用域:
servletContext
session
request
page

搞清以后一切都很明朗。

if (session.getAttibute("name")==null) {
session.setAttribute("name","hello");
} else {
s1 = session.getAttribute("name");
}
;

或者 想要的 是
if (session.getParameter("。。。")==null) {
session.setAttribute("name","hello");
} else {
s1 = session.getAttribute("name");
}

重要的要理解什么是一次请求!!!!!

request是请求。。在当前请求内有效。
但是你在页面中用了转向会附带request的。。因为这只是一次请求。。
楼主可能还没有明白HTTP的请求-相应的含义。。
可以查看一个各个对象的生命周期就会明白了

当你第二次打开a.jsp时是一个新请求。存在原来请求里的内容失效了。。。

可以用Session、Cookies或者数据库存储请求里的数据。。

而且要理解数据持久的概念。。

要实现你的功能,可以另外设一个b.jsp,a.jsp提交都跳转到b.jsp中。b.jsp中:
String a =null;
a = request.getAttribute("name");
if(a==null)
{
request.setAttribute("name",a);
response.sendRedirect("a.jsp");
}

现在基本上都用struts来实现了

其次request的生命周期就是在服务器端页面之间,来自客户端的请求经Servlet容器处理后,由request对象进行封装,它作为jspService()方法的一个参数由容器传递给JSP页面,因此,JSP转发时,request会随着发到下一个页面,但一旦最后一个页面处理完成,这个request的生命周期也就结束了,客户端再次提交请求Servlet又会生成一个新的request对象。
楼主你对第二次提交的请求request.getAttibute()当然不会得到先前保存的东西,因为不是同一个request了,如果楼主不想把东西放到session里,可以放到form的hidden域里,下个请求连form一起传。

request.getParameter("companyName");是获得表单(前台页面表单中名称为companyName)提交的数据
request.getAttribute("cc")是获得你setAttribute的数据(获得是你自己存起来的参数cc的值。)
在超链接里带的参数用。。request.getParameter(参数名)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: