日期:2014-05-16  浏览次数:20373 次

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是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。