一直以来,我以为request的生命周期是一样的。。但最近遇到个问题,
发现有点不同,,结果最终确认到是request.getParameter 和 request.getAttribute 上来了
 一般是这样的,在action中定义一个request.setAttribute,然后通过ActionForward转向到某个a.jsp后(此称为响应),
可以在这个a.jsp中用request.getAttribute 来获取,不过如果这个a.jsp通过跳转到另一个b.jsp去了,那么在b.jsp中request.getAttribute 是获取不到这个值的。。
  同样的,在c.jsp中request.setAttribute提交到action中的list,那么在list也可以用request.getAttribute 可以获取这个值,而且如果list跳转到add或者edit等,只要还在这个action中request.getAttribute 都可以获取这个值的!   现在我说下发现的在不同:
 
  如果在d.jsp中,有如下:
<form action="...." method="post" name="..">
<input type=hidden name="searchtxt" value="request.getParameter('searchtxt')"> 
</form>
这个d.jsp如果是提交到acion中去了,在action可以通过request.getParameter('searchtxt')获取这个值,
但 是这个action再ActionForward回这个d.jsp的时候,这个jsp的的隐藏标签还可以通过request.getParameter('searchtxt')获得这个值
说明这个request.getParameter('searchtxt')的生命周期比request.getAttribute长一些,
它从一个jsp到action再到jsp依然存在!
而request.getAttribute从一个jsp到action后,如果action响应回某个jsp的时候,这个request就结束了
请高手帮我分析下这种区别不好意思我没什么分给大家

解决方案 »

  1.   

    request.getParameter 和 request.getAttribute 生命周期是一样的,是一次request的周期。你的原话“不过如果这个a.jsp通过跳转到另一个b.jsp去了”,如果使用forword跳转的话,同样可以用request.getAttribute 得到数据;如果你用表单提交,就是第二次请求了,所以得不到数据。
      

  2.   

    这么乱。简单的说,对request的操作肯定都是在服务器端解析的,客户端看到的只是html,所以个人理解是:只要浏览器(客户端)不重新发送请求,当前request就是有效的。
      

  3.   

    我这么说吧:
     如果在d.jsp中,有如下: 
    <form action="...." method="post" name=".."> 
    <input type=hidden name="searchtxt" value="〈%=request.getParameter('searchtxt')%〉"> 
    </form> 
    这个d.jsp如果是提交到acion中去了,在action可以通过request.getParameter('searchtxt')获取这个值, 
    但 是这个action再ActionForward回这个d.jsp的时候,这个jsp的的隐藏标签还可以通过request.getParameter('searchtxt')获得这个值 
      
    如果在d.jsp中,有如下: 
    <%
    reques.setAttribute("searchtxt","123");
    String str=request.getAttribute("searchtxt");
    %>
    这个d.jsp如果是提交到acion中去了,在action可以通过request.getAttribute('searchtxt')获取这个值, 
    但 是这个action再ActionForward回这个d.jsp的时候,这个jsp的的隐藏标签还可以通过request.getAttribute('searchtxt')就不能获得这个值 这就是说明了两种方法的生命周期是不一样的
      

  4.   

    如果 <forward>设置了从定向为“真",request.getAttribute("msg"),就得不到在ACION中的request.setAttribute("msg"),
    例如:
    action里面写上
    request.setAttribute("msg");
    用DAO添加一个对象后,
    request.setAttribute("msg", "添加成功!");
    return mapping.findForward("update");
    //========================================
    struts-config.xml设置:
    <forward name="update" path="/college.do?method=queryCollege" redirect="true"></forward>
    //==================================
    在list.jsp页面上
    request.getAttribute("msg")为Null了。
    若不使用从定向的话,则设置redirect="false", 跳转到list.jsp后,我手动刷新页面,有再次添加了同一个对象。
    有什么办法解决??