Servlet 重导定向问题

response.sendRedirect 与 request.getRequestDispatcher(url).forward(request,response)区别

服务器端进行转向的4种方法:
  1.   ServletContext的getRequestDispatcher()   
2. ServletContext的getNamedDispatcher()
3. ServletRequest的getRequestDispatcher()
4. ServletResponse的sendRedirect()进行转向。

1.2.3 功能大于等于 forward() 重导功能
4. sendRedirect()
使用forward方法,因为这些这样比较高效。只有在forward方法不能使用时(比如要转向到一个非本web应用),再使用ServletResponse的sendRedirect()方法。

<jsp:fordward>与 sendRedirect 方法的比较
虽然 <jsp:fordward>与 sendRedirect 方法,都可以将浏览器浏览的网页,重导至另一个网页,但是两者在原理上是不太相同。
a. <jsp:fordward> : 动作是利用伺服端,将资料输出至缓冲区的机制,在前一个网页尚未输出到客户端前,取消资料的输出,然后输出另一个网页的资料,达到重导浏览器的效果。
优点: 两网页间可以分享 request 对象内的变量。
b. sendRedirect : 动作是透过 HTTP 协议的 Header , 对浏览器下达重导指令,因此,不牵涉到服务器端缓冲区的问题。
不过由于 sendRedirect 方法作用于客户端,所以重导前后网页无法分享存在于 request 对象内的变量。
Solution: response.sendRedirect(“test.jsp?key=view”)
今天才搞清楚这个原理,ServletResponse就是在客户端响应返回数据,在这里ServletResponse不保留,request.setAttribute()的属性,如果用response.sendRedirect重导话,一些数据最好绑定到session里,数据一多,服务器吃不消,建议用ServletRequest来重导。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值