这个是我的Servlet.java文件:
String str="This is my string.";
PrintWriter out=response.getWriter();
request.getSession().setAttribute("string", str);
out.println("<a href=\"/MyProject/show.jsp\">Show</a>");当转到show.jsp页面时,用getAttribute方法可以得到string的值。
但是如果用下面这句:
response.sendRedirect("http://localhost:8080/MessageBoard/show.jsp");就显示为空,不太明白为什么,这两句用在servlet里有什么区别吗?
请帮我解释一下,谢谢了!

解决方案 »

  1.   

    request在同一次请求里有效,
    response.sendRedirect会返回到浏览器,执行另一个请求,之前在request的数据全部丢失。
      

  2.   

    可是我试了一下,如果把第一个文件写在普通的.jsp文件中,用两种方法都可以得到值啊?这个跟什么类型的文件有关系吗?
    如果我想在servlet.java中保存数据,就必须要用全局变量么,比如用ServletContext类,用request.getSession().setAttribute()就不行。
    这两个问题有关系么,晕死了。。
      

  3.   


    request.getSession().setAttribute("string", str);
    是将变量str存在session作用域中的"string"键中
    当你执行完这个操作:
    response.sendRedirect("http://localhost:8080/MessageBoard/show.jsp");
    等于是开启了另一个会话。
    不是同一个会话了。
    当然就没有了。
      

  4.   


    WEB组件之间数据共享关系:同一个WEB程序下,ServletContext,在任何场合都可以用
    Session:在同一个用户会话(用户登录OK,过期之前)
    Request:同一个请求,转发的不算。(就是你搞的sendRedirect)
    page:当前页
      

  5.   

    建议看一下Servlet的相关概念,Response.sendRedirect()会将转发地址发回客户端,由客户端再发起请求,有可能转发的地址与前一个请求并不属于同一个WEB应用.
      

  6.   

    跳转到show.jsp是站内转发,同享request, session
    response.sendRedirect是重定向,站外跳转,不同享request, session , application级别变量
      

  7.   

    归根结底,lz没有把session的作用域搞清楚吧!
      

  8.   


    application应该是共享的吧lz可以用request.getRequestDispatcher("show.jsp").forward(request,
    response);这样信息不会丢失
      

  9.   

    楼主加油啊!
    问的问题是servlet 和 session 的问题。
    内容又跟这2个扯不上关系,回答的人都回答的莫名其妙,真不知道说什么好。你要真用SESSION 保存了值 ,
    response.sendRedirect("http://localhost:8080/MessageBoard/show.jsp");
    show.jsp绝对可以取到。可是你用的是SESSION保存了值了吗?你没有啊你用的是REQUIRE请求啊。
    你这样response.sendRedirect("http://localhost:8080/MessageBoard/show.jsp");
    能取到值就怪了。好好了解下客户端跳转和服务器跳转吧。
      

  10.   


    response.sendRedirect能取到session的值???不懂就别乱说
      

  11.   


    request.getSession().setAttribute("string", str);
    哥们他用的是session  你没看清楚~~ 
      

  12.   

     request.getDispatcherHeader("http://localhost:8080/MessageBoard/show.jsp").forward(request,response);