日期:2014-05-20  浏览次数:20747 次

经常问到forward和redirect什么区别?
什么区别?
它们用在什么地方 ?
为什么经常有人纠结着问这个问题。

------解决方案--------------------
前者是服务器跳转,跳转过去的页面那里可以访问request的属性
后者是客户端跳转,相当于用户重新请求一次链接
------解决方案--------------------
探讨
什么区别?
它们用在什么地方 ?
为什么经常有人纠结着问这个问题。

------解决方案--------------------
1.从地址栏显示来说

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容

再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所

以redirect等于客户端向服务器端发出两次request,同时也接受两次response。
------解决方案--------------------
探讨
1.从地址栏显示来说

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容

再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所

以redirect等于客户端向……

------解决方案--------------------
forward 是你打电话 问同事 明天上班不? 你经理就在你同事身边 所以电话没挂 同事问了经理然后告诉你 明天是要上班
redirect 你问同事 明天上班不? 你同事他也不知道 但他告诉了你们经理的电话 让你打电话问经理 然后你就得挂电话 重新打个电话给你经理
------解决方案--------------------
forward跳转,可以访问request请求信息。
redirect跳转,request请求信息丢失
访问机制也不同。redirect实际上执行了两次request请求。第一次能够得到request请求信息,第二次请求信息丢失
------解决方案--------------------
它们都是把一个请求交给另一个 url 

forward 是在服务器端,这种请求可以直接使用原始url的 request 和 response,原始页面提交给你的表单数据可以在被重定向的页面中取到,并且用户在客户端的浏览器地址栏中看到的还是原来请求的 url

redirect 是把服务器把信息返回给客户端,告诉客户端浏览器去请求另一个资源,这种重定向时,客户端浏览器中看到的是重定向之后的 url


换句话说,forward 是在同一个服务器进程中,redirect 是可以跨服务器的。
比如在 http://aaa.bbb.cc 网站中,一般它只可以 forward 网站本身的 url,即:http://aaa.bbb.ccc/...../xxx.jsp,而不能跳到 http://xxx.yyy.zzz 站点的资源。但是 redirect 就可以这样跳



打个比方,如果把联通公司的营业厅比作服务器,那么办理业务的你就是客户端
现在你到联通的营业厅(服务器)的3G开户业务窗口(url)进行3G业务交费

如果窗口的服务员告诉你,她们窗口是办理3G的开户业务,交费是在另一个窗口,请你到那个窗口去办理,这就是 redirect

如果窗口的服务员没有告诉你找错了办理窗口,而是他帮你到管交费的服务员那里帮你把交费业务办理好,再回头给你消息,这就是 forward


------解决方案--------------------
刚看了张孝祥的视频,他是这么说的
forward:就是将请求的处理从别的地方拿过来,然后返回给浏览器
redirect:就是将请求的出来指向另外一个处理请求的地方,即直接告诉别人,让她去找
------解决方案--------------------
楼上说的没错。
forward :就是一种服务器端页面导向的概念,可以传递request和response对象,但只能在同一WEB项目中跳转,对于客户端的体验是没有改变地址栏的地址。
redirect:是一种客户端的重定向概念,不能够传递request和response对象,但可以在整个站点中进行跳转,对于客户端的体验是浏览器上修改了地址栏的地址。

------解决方案--------------------
forward是服务器内部重定向,程序收到请求后重新定向到另一个程序,客户机并不知道;redirect则是服务器收到请求后发送一个状态头给客户,客户将再请求一次,这里多了两次网络通信的来往。当然forward也有缺点,就是forward的页面的路径如果是相对路径就会有些问题了。 

forward 会将 request state , bean 等等信息带往下一个 jsp 
redirect 是送到 client 端后再一次 request , 所以资料不被保留.
使用 forward 你就可以用 getAttribute() 来取的前一个 jsp 所放入的 bean 等等资料

------解决方案--------------------
我向你借10块钱

如果你没钱可借,那么

1、你向你的同学、朋友借了10块钱,然后把这10块钱转借给我,这笔钱应该算是我向你借的,将来还的时候还是还给你,这个叫 forward

2、你对我说:“不好意思,我没钱,但是张三同学很有钱,你找他借吧”。于是我去找张三借钱,这时我借的是张三的钱了,而不是你的钱。这个叫 redirect