黑马程序员技术交流社区

标题: 关于转发与重定向之间的区别 [打印本页]

作者: 水云间    时间: 2013-5-28 22:16
标题: 关于转发与重定向之间的区别
在学习Servlet时,我们学到了Request和Response这两个对象,其中有两个很重要又非常类似的方法,就是转发和重定向,如下代码所示:
  1. request.getRequestDispatcher().forward(request,response);
  2. response.sendRedirect(URL);
复制代码
请问这两个方法有区别吗?比如在开发购物车的时候,要从一个页面转到结账页面,用哪个方法更好呢?
作者: 归☆夜↑『    时间: 2013-5-28 22:27
使用sendRdirect()相当与资源重新请求,Request数据就全丢失了。  使用请求转发,Request的数据才能送到目标页面
作者: gerenvip    时间: 2013-5-28 23:00
首先要明白什么时候用重定向,什么时候用转发,简单说:
如果 想改变地址栏的地址,使用重定向。不过此时request域中存的数据就没了
如果还想使用request域中的数据,建议使用转发,
例如此处的购物车案例,如果你使用session传递以前的购买状态,你可以使用转发,也可以使用重定向
作者: wangpan    时间: 2013-5-28 23:22
转发重定向
URL变化
重新发出请求 不会
是否携带请求
目标URL要求 仅本WEB应用任意URL
以上是转发和重定向的区别。
在使用的时候,你要思考一下,是否需要在请求中携带针对于本次请求的数据?
如果答案为“是”,那么你就应该使用转发。
如果不需要在请求中携带数据就可以使用重定向。

作者: 殇_心。    时间: 2013-5-29 16:53
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
作者: judyfun    时间: 2013-9-24 22:17
* 重定向和请求转发
                * 浏览器发送一次请求,可以涉及多个页面。
                * 请求的个数:
                        * 重定向:2次
                        * 请求转发:1次
                * 地址栏是否改变
                        * 重定向:改变
                        * 请求转发:不改变
                * api获得方式
                        * 重定向:response.sendRedirct(location)
                        * 请求转发:request.getRequestDispatcher(path).forward(...)
                * 是否可以共享request对象属性的值
                        * 重定向:不能获取,两个request对象
                        * 请求转发:可以获得,虽然是两个request对象,但第二个为第一个的克隆,数据相同。
                * 选择
                        * 重定向:多个资源,没有数据传递时。如果希望地址栏改变,肯定重定向。
                        * 请求转发:多个资源,request中有属性的传递时。如果资源在WEB-INF目录下,需要转发。
               




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2