Forward:重新包装一个Request对象,保留原Request中包含的对象(即通过request.setAttribute()存放的对象),然后将控制权转交给一个新的Servlet处理,在Struts中即跳转到一个新的Action,浏览器的地址栏仍显示跳转前的URL。

Redirect:抛弃原有Request对象(即request.getAttribute()取不出任何事先存放的对象),控制权移交给一个新的URL(不一定是Servlet),同时向浏览器发送响应,浏览器地址栏将显示跳转后的URL。

 

响应重定位和请求转发的区别:

1RequestDispatcher对象是一个Web资源的包装器,可以用来把当前请求转发到该资源。这种转发是服务器端控制权的转向,客户端发来的请求将交由新的页面进行处理。使用请求转发,在客户浏览器的地址栏中不会显示转发后的资源地址。使用请求转发,可以将前一个页面的数据、状态等信息传到转发的页面。

2)使用响应对象的sendRedirect()方法实际是服务器向浏览器发送一个特殊的响应头(Location,状态吗 302),它命令浏览器连接到新的位置。因此,使用这种方法在浏览器的地址栏中可以看到地址的变化。重定向是作为不同请求来看待的,因此,所有请求作用域的参数在重定向到下一个页面时都会失效。另外,使用sendRedirect()方法重定向时,资源不能位于WEB-INF目录中。

在调用sendRedirect ()方法之前,主页面不能有内容输出。在调用sendRedirect()方法之后,应该有一个return语句。