页面一<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'MyJsp.jsp' starting page</title>
    
  </head>
  
  <body>
    <form action="${pageContext.request.contextPath }/temp/ss.jsp" method="get">
     <%
     request.setAttribute("a","aaa");
     out.write(request.toString());
     %>
     <input type="submit"/>
    </form>
  </body>
</html>页面二<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'ss.jsp' starting page</title>
    
  </head>
  
  <body>
    ---------------[<%=request.getAttribute("a") %>]---------------
    ---------------[<%out.write(request.toString()); %>]---------------
  </body>
</html>请问为什么在页面二用request.getAttribute("a")就取不到值了?

解决方案 »

  1.   

    在页面一应将request.setAttribute("a","aaa")改成HttpServlet session = request.getSession();
           session..setAttribute("a","aaa");
    在页面二采用session.getAttribute("a");
      

  2.   

    为什么就不是同一个request了? 请详细解释下?
      

  3.   

    这个我知道,我是想知道怎么可以实现在页面之间传递request的attribute这个属性,为什么表单提交request的attribute属性还取不到呢?郁闷中……
      

  4.   

    这个我试过了,一样取不到。并且get和post对于attribute应该没有什么区别的。
      

  5.   

    不是一个request的原因很简单,首先你要明白客户端向服务器断请求的整个过程和request的生命周期,你在请求第一个页面的时候,一下代码:
    <%
                request.setAttribute("a","aaa");
                out.write(request.toString());
    %>
    在服务器端就已经被执行,你可以再客户端查看源码肯定是看不到的,其实可以很简单的解释就似乎IE只能识别HTML给你,这部分是WEB服务器解析的,在WEB服务器上可以经历很多中间过程,requset的生命周期是从请求发送到WEB服务器开始创建,当服务器向客户端输出数据后,也就是这个页面反馈给客户端浏览器的时候,就注销了,相当于在一个线程中创建的,此为9个内置对象之一。当你通过反馈回来的页面,再次提交时,此为第二次请求WEB服务器(第一次是请求页面内容,第二次为请求服提交内容),所以创建的根本不是一个request,前者早已经注销。使用session可以解决此类问题,但是善用SESSION,涉及全局变量的使用都要注意其相互的影响我们一般讲需要暂存的数据,作为页面隐藏项目,Struts内部有专门的隐藏标签,将常用的隐藏标签封装到一个小页面内部,其余界面include进来即可,尽量避开SESSION的泛滥使用。
      

  6.   

    request.setAttribute("a","aaa");
    out.write(request.toString());
    当页面加载时就已经执行了,执行完后request注销。之后通过submit提交,只是提交表单中的元素。就如xieyuooo说的,第一次是请求页面内容,第二次为请求服提交内容
      

  7.   

    同楼上的 不是一个request建议楼主去读一下jsp内置对象的书籍资料。
      

  8.   

    这样讲吧,当你下载第一个页面时,产生了一个reqeust对象。当你点击submit按钮时,对第二个页面发起请求,产生第二个request对象,两个request对象是不一样的。
      

  9.   

    request的生命期为你点击按钮到新页面出现为止
    所以你两个页面里的request一定不是同一个
      

  10.   

    老大,第一个页面本身就是一个请求,也就是第一个页面的加载是请求服务器加载的,两次请求分别是:
    1、第一次是加载页面,这个请求的是一个request
    2、第二次是提交页面,这个请求是第二个request
      

  11.   

    我的理解是这样的,看看对你有没帮助。这么说吧,你的request从你打开MyJsp.jsp的时候创建,你可以在MyJsp.jsp里任意使用它。当你点击button的时候,request转到服务器,从服务器转到ss.jsp时,这个request已经销毁,当ss.jsp这个页面打开时你设的这个request已经不存在了,在ss.jsp这个页面的已经是一个新的request了。所以你拿不到他的值。如果你一定要这样拿的话,可以试试隐藏域,在MyJsp.jsp中
    <input type="hidden" name="name" value="<%=request.getAttribute("a") %>" />
    然后在ss.jsp中request.getParameter("name")这样拿。你去看看request的生命周期。
    有错的地方请大家指点。
      

  12.   

    并非是同一request对象,当然取不到了!
      

  13.   

    不是同一个request当然获取不到了
    你可以放到session或者application中
      

  14.   

    request存在只对forward的页面有效
      

  15.   

    request是请求,你不是一个request的
      

  16.   

    要搞懂request内置对象的生命周期和属性范围!根本就不是同一个
      

  17.   

    这么说吧,重定向和转发理解吧?
    我也学完没多久,我是这么理解的,这是一个重定向的过程,
    首先你提交了一个请求页面给服务器,服务器返回给你第一个页面,此时产生一个request对象,
    你将a对象放入了这个request,然后点击提交!
    关键就是在这里了,服务器根据表单中的action="${pageContext.request.contextPath }/temp/ss.jsp" 
    告诉浏览器,让浏览器重新发送一个${pageContext.request.contextPath }/temp/ss.jsp的请求,
    当浏览器向服务器发送了ss.jsp页面请求时,又产生了一个request对象,也就是你在ss.jsp页面中所用的request
    这便是一个重定向,重定向是不能共享request隐含对象的,
    所以在ss.jsp页面中通过request当然是得不到a这个对象的我奇怪的是你为什么要这么写呢,表单一般是用来提交数据的,然后通过request.getParemater("...")来获取参数,为什么你要在表单中加入这样的代码呢?很费解....
      

  18.   

    request生命周期的问题,请翻看教材
      

  19.   

     求助:怎样把javascript返回值添加至url参数 
      

  20.   

    你真的要这么做,将这个值跟着Action一起带过去
              a.aciton ? aaa=+"aaa";
      在action里面request.getParameter(aaa);
      然后request.setAttribute("aaa",aaa);
    跳到第二个页面的时候就可以取到咯!session毕竟范围大了点,浪费哟!
      

  21.   

    这个例子可以让你很好的学习一下一下REQUEST对象的生命周期了,仔细研究一下转发和重定向之间的工作流程吧,很有帮助另外顶下29楼~解释的很透彻
      

  22.   


    以后就用session的存储方式吧。request实在不好掌握,但是request也有自己的优点,因为他的生命周期很短暂,如果只是用到一次,那么正好符合它的特性,还节省了服务器的资源。