JavaWeb forward与sendRedirect区别

转载自 : http://blog.csdn.net/xuxurui007/article/details/7755792

SendRedirectForward
不同的request不同的对象,但是可以取到上一个页面的内容
send后面的语句会继续执行,除非returnForward后面的语句不会继续发送给客户端
速度慢速度快
需要到客户端的往返,可以跳转到任何页面服务器内部转换
地址栏有变化地址栏没有变化
可以传参数,直接写在URL后面可以传参数
“/” 代表的是http://127.0.0.0/ <%response.sendRedirect();%>test“/” 代表的是 http://127.0.0.1/test this.getServletContext().getRequestDispatcher(“/servlet_jsp/ServletUseJSP.jsp”).forward(req,resp); 并且只能以 / 开头

HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源。
sendRedirect实现请求重定向,forward实现的是请求转发。
在web服务器内部的处理机制也是不一样的。

  1. forward方法只能转发给同一个web站点的资源,而sendRedirect方法还可以定位到同一个web站点的其他应用,甚至可以通过传入绝对路径定位到别的web站点,这事forward的方法所不能比拟的优势。

  2. 如果传给RequestDispatcher 的参数以”/”开头,则访问的是当前web应用的根目录
    如果传给sendRedirect方法以”/”开头,访问的是整个web站点的根目录。

  3. forward重定向后,浏览器url地址不变,sendRedirect转发后,浏览器url地址变为目的url地址

  4. 使用forward重定向的过程,是浏览器先向目的Servlet发送一次Request请求,然后再服务器端由Servlet再将请求发送到目的url,再由服务器端Servlet返回Response到浏览器端。浏览器和服务器一次请求响应。
    使用sendRedirect转发的过程,浏览器先向目的Servlet发送一次请求,Servlet看到sendRedirect将目的url返回到浏览器,浏览器再去请求目的url,目的url再返回response到浏览器。浏览器和服务器两次请求响应。

  5. forward方法的调用者与被调用者之间共享Request和Response
    sendRedirect方法由于两次浏览器服务器请求,所以有两个Request和Response。
    如果使用request.setAttribute传递一些属性就需要用forward,如果想要跳转到别的应用的资源,就需要用sendRedirect。

  6. 无论是forward方法还是sendRedirect方法调用前面都不能有PrintWriter输出到客户端。
    forward方法报错: Java.lang.IllegalStateException: Cannot forward after response has been committed
    sendRedirect报错:java.lang.IllegalStateException
    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值