问题描述
这个是我的Servlet.java文件:Stringstr="Thisismystring.";PrintWriterout=response.getWriter();request.getSession().setAttribute("string",str);out.println("<ahref="/MyProject/show.jsp">Show</a>");当转到show.jsp页面时,用getAttribute方法可以得到string的值。但是如果用下面这句:response.sendRedirect("http://localhost:8080/MessageBoard/show.jsp");就显示为空,不太明白为什么,这两句用在servlet里有什么区别吗?请帮我解释一下,谢谢了!
解决方案
解决方案二:
request在同一次请求里有效,response.sendRedirect会返回到浏览器,执行另一个请求,之前在request的数据全部丢失。
解决方案三:
可是我试了一下,如果把第一个文件写在普通的.jsp文件中,用两种方法都可以得到值啊?这个跟什么类型的文件有关系吗?如果我想在servlet.java中保存数据,就必须要用全局变量么,比如用ServletContext类,用request.getSession().setAttribute()就不行。这两个问题有关系么,晕死了。。
解决方案四:
该回复于2011-02-21 10:05:06被版主删除
解决方案五:
request.getSession().setAttribute("string",str);是将变量str存在session作用域中的"string"键中当你执行完这个操作:response.sendRedirect("http://localhost:8080/MessageBoard/show.jsp");等于是开启了另一个会话。不是同一个会话了。当然就没有了。
解决方案六:
引用2楼hotmail1215的回复:
可是我试了一下,如果把第一个文件写在普通的.jsp文件中,用两种方法都可以得到值啊?这个跟什么类型的文件有关系吗?如果我想在servlet.java中保存数据,就必须要用全局变量么,比如用ServletContext类,用request.getSession().setAttribute()就不行。这两个问题有关系么,晕死了。。
WEB组件之间数据共享关系:同一个WEB程序下,ServletContext,在任何场合都可以用Session:在同一个用户会话(用户登录OK,过期之前)Request:同一个请求,转发的不算。(就是你搞的sendRedirect)page:当前页
解决方案七:
建议看一下Servlet的相关概念,Response.sendRedirect()会将转发地址发回客户端,由客户端再发起请求,有可能转发的地址与前一个请求并不属于同一个WEB应用.
解决方案八:
跳转到show.jsp是站内转发,同享request,sessionresponse.sendRedirect是重定向,站外跳转,不同享request,session,application级别变量
解决方案九:
归根结底,lz没有把session的作用域搞清楚吧!
解决方案十:
lz好好转发试试
解决方案十一:
引用7楼rainsilence的回复:
跳转到show.jsp是站内转发,同享request,sessionresponse.sendRedirect是重定向,站外跳转,不同享request,session,application级别变量
application应该是共享的吧lz可以用request.getRequestDispatcher("show.jsp").forward(request,response);这样信息不会丢失
解决方案十二:
引用10楼happysmhzp的回复:
引用7楼rainsilence的回复:跳转到show.jsp是站内转发,同享request,sessionresponse.sendRedirect是重定向,站外跳转,不同享request,session,application级别变量application应该是共享的吧lz可以用request.getRequestDispatcher("show.j……
你试过吗?如果共享就是严重的安全问题了。
解决方案十三:
转发和重定向的区别不在于取不取得到值,而在于用途!!!!!!
解决方案十四:
楼主加油啊!问的问题是servlet和session的问题。内容又跟这2个扯不上关系,回答的人都回答的莫名其妙,真不知道说什么好。你要真用SESSION保存了值,response.sendRedirect("http://localhost:8080/MessageBoard/show.jsp");show.jsp绝对可以取到。可是你用的是SESSION保存了值了吗?你没有啊你用的是REQUIRE请求啊。你这样response.sendRedirect("http://localhost:8080/MessageBoard/show.jsp");能取到值就怪了。好好了解下客户端跳转和服务器跳转吧。
解决方案十五:
对楼主无言了。。。。。连续开贴问同一个问题
解决方案:
引用13楼zhuchao_ko的回复:
楼主加油啊!问的问题是servlet和session的问题。内容又跟这2个扯不上关系,回答的人都回答的莫名其妙,真不知道说什么好。你要真用SESSION保存了值,response.sendRedirect("http://localhost:8080/MessageBoard/show.jsp");show.jsp绝对可以取到。可是你用的是SESSION……
response.sendRedirect能取到session的值???不懂就别乱说
解决方案:
引用13楼zhuchao_ko的回复:
楼主加油啊!问的问题是servlet和session的问题。内容又跟这2个扯不上关系,回答的人都回答的莫名其妙,真不知道说什么好。你要真用SESSION保存了值,response.sendRedirect("http://localhost:8080/MessageBoard/show.jsp");show.jsp绝对可以取到。可是你用的是SESSION保……
request.getSession().setAttribute("string",str);哥们他用的是session你没看清楚~~
解决方案:
request.getDispatcherHeader("http://localhost:8080/MessageBoard/show.jsp").forward(request,response);
解决方案:
讨论来讨论区,还是自己动手实践下比较好,多做几次什么都明白了
解决方案:
该回复于2011-02-21 13:01:32被版主删除