forward和redirect有什么区别
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.