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是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。
http://yilin.iteye.com/blog/893998
posted on 2012-02-22 13:39
wilsonyq 阅读(325)
评论(0) 编辑 收藏 所属分类:
javaweb