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