forward和redirect的区别

页面转发的区别:


在Servlet中两种实现:

forward方式:
request.getRequestDispatcher(“/somePage.jsp”).forward(request, response);

redirect方式:
response.sendRedirect(“/somePage.jsp”);


forward是服务器内部重定向,程序收到请求后重新定向到另一个程序,客户机并不知道;
redirect则是服务器收到请求后发送一个状态头给客户,客户将再请求一次,这里多了两次网络通信的来往。当然forward也有缺点,就是forward的页面的路径如果是相对路径就会有些问题了。

forward 会将 request state , bean 等等信息带往下一个 jsp;
redirect 是送到 client 端后再一次 request , 所以资料不被保留。
使用 forward 你就可以用 getAttribute() 来取得前一个 jsp 所放入的 bean 等等资料。


forward是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,它不会改变Request的值,如果你需要在下一个页面中能从中获取新的信息的话,你可以Request.setAttribute()来放置一些标志,这样从下一个页面中获取。

redirect是完全的跳转,浏览器将会得到跳转的地址, 并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,forward更加高效,在forward可以满足需要时,尽量使用RequestDispatcher.forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用 HttpServletResponse.sendRedirect()方法。


forward与include共享Request范围内的对象,而redirect则不行,即:如果一个java bean被声明为request范围的话,则被forward到的资源也可以访问这个java bean,而redriect则不行。
forward与include基本上都是转发到context内部的资源,而redirect可以重定向到外部的资源,如: res.sendRedriect(“http://www.baidu.com“);


forward:一般用于用户登录的时候,根据角色转发到相应的模块。

redirect:一般用于用户注销登录时返回主页面或跳转到其它的网站等。


从效率来说:
forward:高 redirect:低


例子:

<jsp:forward page="/servlet/login">

<jsp:param name="username" value="jsmith" />

</jsp:forward>

描述
<jsp:forward>标签从一个jsp文件向另一个文件传递一个包含用户请求的request对象.<jsp:forward>标签以下的代码,将不能执行.

你能够向目标文件传送参数和值,在这个例子中我们传递的参数名为username,值为jsmith,如果你使用了<jsp:param>标签的话,目标文件必须是一个动态的文件,能够处理参数.

如果你使用了非缓冲输出的话,那么使用<jsp:forward>时就要小心。
如果在你使用<jsp:forward>之前,jsp文件已经有了数据,那么文件执行就会出错.


总结:

  • Redirect等于客户端向服务器发出两次request,同时也接受到两次response;Forward却只是一次request一次response。相比之下,Forward性能更高。
  • Forward能够存储request Scope的Attribute而Redirect却不行。
  • Forward的同时URL并不会变。
  • Forward需要在Servlet中需要通过一个Dispatcher来实现。
  • Redirect能够防止某些情况下客户端Refresh造成的一些未知后果(例如连续删除)。

转自:http://blog.csdn.net/tenor/article/details/4077079

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值