黑马程序员技术交流社区
标题:
关于转发与重定向之间的区别
[打印本页]
作者:
水云间
时间:
2013-5-28 22:16
标题:
关于转发与重定向之间的区别
在学习Servlet时,我们学到了Request和Response这两个对象,其中有两个很重要又非常类似的方法,就是转发和重定向,如下代码所示:
request.getRequestDispatcher().forward(request,response);
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