jsp跳转:forward与redirect的区别

forward与redirect都是用于引导客户端的请求到另一个页面或另一个Servlet中的,二者的区别总结如下:
1.RequestDispatcher.forward()
服务端跳转,无条件立即执行,后面代码不再执行;
转发页面和转发到的页面可以共享request里面的数据;
forward效率高;
通常在servlet中使用;
容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,地址栏不改变;
无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过response.setAttribute("name",name)来传至下一个页面;
一般用于用户登陆的时候,根据角色转发到相应的模块
注意:forward动作发生时,如果已经有文本被写入输出流而且页面没有设置缓冲 ,将抛出IllegalStateException异常。

2.response.sendRedirect()
客户断跳转,所有代码执行完后再执行跳转;
用户请求不被发送到下一个页面,不能共享数据,必须重新设置参数;
redirect效率低;
通常在jsp中使用;
完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接,这样,从浏览器的地址栏中可以看到跳转后的链接地址;
可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件;
一般用于用户注销登陆时返回主页面和跳转到其它的网站等
注意:response.sendRedirect之后,应该紧跟一句return;
response.sendRedirect是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值