Forward
与Redirect
在做前台开发过程中你可能经常遇到关于转发页面得操作,很显然的就想到了forward和redirect,但是到底用哪一个呢,他们之间有什么区别呢,现在我将我自己的理解以及开发的时候怎么应用写出来供大家参考一下:
(1) 共同点:
都实现了根据自己的条件实现的页面得跳转。
(2) 区别
类别
|
概念
|
共享数据
|
应用
|
Redirect
|
URL重新定向:可以是任意的URL
|
不能共享request里面的数据
|
一般用于用户注销登录时返回主页面和跳转到其它的网站等等
|
Forward
|
页面的转发:只能是同一个Web应用程序的其他Web组件
|
转发页面和转发到的页面可以共性request里面的数据
|
一般用于用户登录的时候根据角色转发到相应的模块等等
|
(3) 例子:
譬如:client 通过XXX\index.jsp?name=gauss&pwd=123访问index.jsp,而index.jsp中有<jsp:forward page="login.jsp"/>,则在login.jsp中可以通过request.getParameter()得到name和pwd,而<%response.sendRedirect("login.jsp");%>得不到。
(4) 注意
一般在index.jsp页面之前有个提交数据的页面default.jsp,则defautl.jsp页面提交的数据就可以在login.jsp页面得到,而不是得到index.jsp页面提交的数据,index.jsp页面只是执行的都是一个转发操作当然在里面可以增加也写业务操作,他可以得到request的数据,用XXX\index.jsp?name=gauss&pwd=123这种方式登录就是省略了index.jsp前面的一个页面提交数据而已
前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用
sendRedirect()方法。
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。