redirect和forward的定义:
1. redirect(重定向):服务端发送给客户端一个重定向的临时响应头,这个响应头包含重定向之后的URL,客户端用新的URL重新向服务器发送一个请求。
2. forward(请求转向):服务器程序内部请求转向,这个特性允许前一个程序用于处理请求,而后一个程序用来返回响应。
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取(request不能获取,在跳转到的目标页面不能使用request.getAttribute("参数"),该语句失效),
所以 response .sendRedirect() 不能用 request 对象传递数据,而 forward 是可以的
Forward
... Forward 由应用程序内部执行
... 浏览器完全不会识别到forward命令,
因此原始的URL地址会被完好的保留下来
. ... 当浏览器刷新的时候会向原始地址提交请求.
redirect
... redirect 分为两个步骤, 网络应用程序会指定浏览器获取第二个网址,
这个网址和原始的url是不同的
.... 当浏览器刷新时不会请求原始地址而是会返回被转移的网址
. ... 由于redirect 需要两个步骤,因为执行起来比forward慢
总体说来, 当能够保证安全的情况下应该采用forward. 否则应该采用redirect.