forward和redirect的区别


1.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容
再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所 以redirect等于客户端向服务器端发出两次request,同时也接受两次response。
谁能解释一下这两段话的意思,尤其是后一段的2次????

回答列表:

forward:A访问B,B访问C,过程是A-->B-->C,此时打开的是C,但地址栏里的地址是B的地址。
redirect:A访问B,若想访问C,需由B返回给A一个参数,由A去访问C,过程是A-->B-->A-->C,地址栏的地址是C。2次的意思是指一次访问B,一次访问C

redirect先要返回上一请求,然后在访问下一请求。

通俗的说:
当一个客户端访问服务器端的一个JSP(本质上就是一个SERVLET),当调用response.sendRedirect,实际上它做的是从服务器端往客户端发一个指令,告诉IE把地址拦自动变成第2个页面,并点一下转到那个按钮,客户端接到这个指令后马上去访问第2个JSP,第2个JSP再把算出的结果返回客户端。。。。。。
forward  当一个客户端访问服务器端的一个JSP(本质上就是一个SERVLET),在服务器端直接转到第2个JSP,让第2个JSP(实际上是SERVLET)来处理客户端的请求,请求处理完把结果直接返回到客户端。(可以转了好几次,客户端不知道。。。。最后一个反给客户端)
区别:
<jsp:forward>                          response.sendRedirect
使用同一个request                        是不同的request
forward后的语句不会继续发送给客户端        send后的语句会继续执行,除非return
速度快                                      速度慢
服务器内部转换                              需要到客户端的往返,可以转到任何页面
可以传参数                                  可以传参数,直接写在url后面
地址拦没有变化                              地址拦有变化

forward体现在请求转发。。。也就意味着你的请求参数a-->b-->c  以页面也可以获得a到b的请求参数
response.sendRedirect 重定向  到c页面时  a--b的参数就得不到了。。是一个新的请求

后面的意思是:  服务器叫客服端转发    就是再你自己的电脑上转发  不是服务器转发

forward仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
redirect则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
所以,forward更加高效,在forward可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。
在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

我感觉也是,能用Forward是服务器间的请求跳转!Redirect是重定向!相当于直接在浏览器输入地址!

forward和redirect的区别
关键是redirect是重新返回客户端,重定向
而forword是可以是内部把请求进行转向,不用返回客户端

redirect里的2次的概念应该是这样的:
第一次request:  客户端    请求->  服务器
第一次response: 服务器    redirect(url)->  客户端
第二次request:  客户端    根据redirect的url再次请求  服务器
第二次response: 服务器直接去获取(url)的内容。

来自: http://hi.baidu.com/274084093/blog/item/97c9bbde6153b753cdbf1af9.html

你可能感兴趣的:(redirect)