摘錄地址:http://blog.csdn.net/gauss2008/archive/2006/06/18/809765.aspx
Forward與Redirect
在做前臺(tái)開(kāi)發(fā)過(guò)程中你可能經(jīng)常遇到關(guān)于轉(zhuǎn)發(fā)頁(yè)面得操作,很顯然的就想到了forward和redirect,但是到底用哪一個(gè)呢,他們之間有什么區(qū)別呢,現(xiàn)在我將我自己的理解以及開(kāi)發(fā)的時(shí)候怎么應(yīng)用寫(xiě)出來(lái)供大家參考一下:
(1) 共同點(diǎn):
都實(shí)現(xiàn)了根據(jù)自己的條件實(shí)現(xiàn)的頁(yè)面得跳轉(zhuǎn)。
(2) 區(qū)別
類(lèi)別
|
概念
|
共享數(shù)據(jù)
|
應(yīng)用
|
Redirect
|
URL重新定向:可以是任意的URL
|
不能共享request里面的數(shù)據(jù)
|
一般用于用戶注銷(xiāo)登錄時(shí)返回主頁(yè)面和跳轉(zhuǎn)到其它的網(wǎng)站等等
|
Forward
|
頁(yè)面的轉(zhuǎn)發(fā):只能是同一個(gè)Web應(yīng)用程序的其他Web組件
|
轉(zhuǎn)發(fā)頁(yè)面和轉(zhuǎn)發(fā)到的頁(yè)面可以共性request里面的數(shù)據(jù)
|
一般用于用戶登錄的時(shí)候根據(jù)角色轉(zhuǎn)發(fā)到相應(yīng)的模塊等等
|
(3) 例子:
譬如:client 通過(guò)XXX\index.jsp?name=gauss&pwd=123訪問(wèn)index.jsp,而index.jsp中有<jsp:forward page="login.jsp"/>,則在login.jsp中可以通過(guò)request.getParameter()得到name和pwd,而<%response.sendRedirect("login.jsp");%>得不到。
(4) 注意
一般在index.jsp頁(yè)面之前有個(gè)提交數(shù)據(jù)的頁(yè)面default.jsp,則defautl.jsp頁(yè)面提交的數(shù)據(jù)就可以在login.jsp頁(yè)面得到,而不是得到index.jsp頁(yè)面提交的數(shù)據(jù),index.jsp頁(yè)面只是執(zhí)行的都是一個(gè)轉(zhuǎn)發(fā)操作當(dāng)然在里面可以增加也寫(xiě)業(yè)務(wù)操作,他可以得到request的數(shù)據(jù),用XXX\index.jsp?name=gauss&pwd=123這種方式登錄就是省略了index.jsp前面的一個(gè)頁(yè)面提交數(shù)據(jù)而已
摘錄補(bǔ)充:
效率:
Forward高, Redirect低, 因?yàn)镽edirect的流程是這樣的, request 1 sent to server, server return back to client, request 2 then sent to server. But Forward 僅在server side處理, 對(duì)client side 是透明的. 由于Redirect 有兩次傳輸, 所以效率低.
范圍:
由于對(duì)request.setAttribute() 來(lái)說(shuō), 它攜帶的對(duì)象生存范圍只在request內(nèi), 所以Redirect方式會(huì)導(dǎo)致request攜帶的對(duì)象丟失.
總結(jié): 一般還是用Forward比較合適.

歡迎大家訪問(wèn)我的個(gè)人網(wǎng)站
萌萌的IT人