request.setAttribute

来源:互联网 发布:centos tengine 编辑:程序博客网 时间:2024/04/28 17:21


  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(参数名)

 

 

原创粉丝点击