response.sendRedirect() 的session丢失问题

问题描述:login.jsp是登陆页面,login_action.jsp是处理登陆数据的页面,welcome.jsp是登陆成功后的欢迎界面。

如果login传过来的用户名和密码已经存在,在welcome.jsp中就用到这个用户名,于是写了如下代码:

session.setAttribute("username",username); response.sendRedirect("welcome.jsp");

结果在welcome.jsp中无法通过(String)session.getAttribute("username")取到值。

解决方法:

request.getRequestDispatcher("welcome.jsp").forward(request, response);替换

response.sendRedirect("welcome.jsp");

 原理:

使用时response.sendRedirect(),如果是跨域跳转,则session会丢失,否则不会。

例如:在本地机上有项目名问web1和web2的两个项目同时运行,从web1跳转到web2当然是跨域跳转,session丢失。但如果是从地址http://localhost:8080/web1跳转到http://127.0.0.1:8080/web2也同样会丢失session。

 

在web1的servlet中执行response.sendRedirect("/web1/page2.jsp")是域内跳转,session不会丢失,但保存在request中的属性值在page2.jsp中无法取到,也就是说在page2.jsp中通过request.getAttribute()的方法无法取得值,所以只能通过把参数写到url中的方式传递参数,例如:response.sendRedirect("/web1/page2.jsp?action=select").

 

因为forward()就是转发。sendRedirect就是重定向。两者最大的区别就是一个是:
forward()执行后还是在同一个requestrequest范围,而sendRedirect执行之后就不在同一个request范围里面。

 

RequestDispatcher.forward()是在服务器端起作用,当使用forward()时,Servletengine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递.

 

response.sendRedirect()是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,且在浏览器地址栏上会出现重定向页面的URL.

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值