偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

forward和redirect的區(qū)別

開發(fā) 后端
本篇文章對(duì)于forward和redirect的區(qū)別做出了幾點(diǎn)解釋,希望對(duì)大家有所幫助。

1.從地址欄顯示來說

forward是服務(wù)器請(qǐng)求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器.瀏覽器根本不知道服務(wù)器發(fā)送的內(nèi)容從哪里來的,所以它的地址欄還是原來的地址.

redirect是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請(qǐng)求那個(gè)地址.所以地址欄顯示的是新的URL.

2.從數(shù)據(jù)共享來說

forward:轉(zhuǎn)發(fā)頁(yè)面和轉(zhuǎn)發(fā)到的頁(yè)面可以共享request里面的數(shù)據(jù).

redirect:不能共享數(shù)據(jù).

3.從運(yùn)用地方來說

forward:一般用于用戶登陸的時(shí)候,根據(jù)角色轉(zhuǎn)發(fā)到相應(yīng)的模塊.

redirect:一般用于用戶注銷登陸時(shí)返回主頁(yè)面和跳轉(zhuǎn)到其它的網(wǎng)站等.

4.從效率來說

forward:高.

redirect:低.

本質(zhì)區(qū)別

解釋一

一句話,轉(zhuǎn)發(fā)是服務(wù)器行為,重定向是客戶端行為。為什么這樣說呢,這就要看兩個(gè)動(dòng)作的工作流程:

轉(zhuǎn)發(fā)過程:客戶瀏覽器發(fā)送http請(qǐng)求----》web服務(wù)器接受此請(qǐng)求--》調(diào)用內(nèi)部的一個(gè)方法在容器內(nèi)部完成請(qǐng)求處理和轉(zhuǎn)發(fā)動(dòng)作----》將目標(biāo)資源發(fā)送給客戶;在這里,轉(zhuǎn)發(fā)的路徑必須是同一個(gè)web容器下的url,其不能轉(zhuǎn)向到其他的web路徑上去,中間傳遞的是自己的容器內(nèi)的request。在客戶瀏覽器路徑欄顯示的仍然是其第一次訪問的路徑,也就是說客戶是感覺不到服務(wù)器做了轉(zhuǎn)發(fā)的。轉(zhuǎn)發(fā)行為是瀏覽器只做了一次訪問請(qǐng)求。

重定向過程:客戶瀏覽器發(fā)送http請(qǐng)求----》web服務(wù)器接受后發(fā)送302狀態(tài)碼響應(yīng)及對(duì)應(yīng)新的location給客戶瀏覽器--》客戶瀏覽器發(fā)現(xiàn)是302響應(yīng),則自動(dòng)再發(fā)送一個(gè)新的http請(qǐng)求,請(qǐng)求url是新的location地址----》服務(wù)器根據(jù)此請(qǐng)求尋找資源并發(fā)送給客戶。在這里 location可以重定向到任意URL,既然是瀏覽器重新發(fā)出了請(qǐng)求,則就沒有什么request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑,客戶可以觀察到地址的變化的。重定向行為是瀏覽器做了至少兩次的訪問請(qǐng)求的。

解釋二

重定向,其實(shí)是兩次request,

第一次,客戶端request A,服務(wù)器響應(yīng),并response回來,告訴瀏覽器,你應(yīng)該去B。這個(gè)時(shí)候IE可以看到地址變了,而且歷史的回退按鈕也亮了。重定向可以訪問自己web應(yīng)用以外的資源。在重定向的過程中,傳輸?shù)男畔?huì)被丟失。

例子:

請(qǐng)求轉(zhuǎn)發(fā)是服務(wù)器內(nèi)部把對(duì)一個(gè)request/response的處理權(quán),移交給另外一個(gè)

對(duì)于客戶端而言,它只知道自己最早請(qǐng)求的那個(gè)A,而不知道中間的B,甚至C、D。 傳輸?shù)男畔⒉粫?huì)丟失。

例子:

解釋三

假設(shè)你去辦理某個(gè)執(zhí)照,

重定向:你先去了A局,A局的人說:“這個(gè)事情不歸我們管,去B局”,然后,你就從A退了出來,自己乘車去了B局。

轉(zhuǎn)發(fā):你先去了A局,A局看了以后,知道這個(gè)事情其實(shí)應(yīng)該B局來管,但是他沒有把你退回來,而是讓你坐一會(huì)兒,自己到后面辦公室聯(lián)系了B的人,讓他們辦好后,送了過來。

三、請(qǐng)求重定向與請(qǐng)求轉(zhuǎn)發(fā)的比較

盡管HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以讓瀏覽器獲得另外一個(gè)URL所指向的資源,但兩者的內(nèi)部運(yùn)行機(jī)制有著很大的區(qū)別。下面是HttpServletResponse.sendRedirect方法實(shí)現(xiàn)的請(qǐng)求重定向與RequestDispatcher.forward方法實(shí)現(xiàn)的請(qǐng)求轉(zhuǎn)發(fā)的總結(jié)比較:

(1)RequestDispatcher.forward方法只能將請(qǐng)求轉(zhuǎn)發(fā)給同一個(gè)WEB應(yīng)用中的組件;而 HttpServletResponse.sendRedirect 方法不僅可以重定向到當(dāng)前應(yīng)用程序中的其他資源,還可以重定向到同一個(gè)站點(diǎn)上的其他應(yīng)用程序中的資源,甚至是使用絕對(duì)URL重定向到其他站點(diǎn)的資源。如果傳遞給HttpServletResponse.sendRedirect 方法的相對(duì)URL以“/”開頭,它是相對(duì)于整個(gè)WEB站點(diǎn)的根目錄;如果創(chuàng)建RequestDispatcher對(duì)象時(shí)指定的相對(duì)URL以“/”開頭,它是相對(duì)于當(dāng)前WEB應(yīng)用程序的根目錄。

(2)調(diào)用HttpServletResponse.sendRedirect方法重定向的訪問過程結(jié)束后,瀏覽器地址欄中顯示的URL會(huì)發(fā)生改變,由初始的URL地址變成重定向的目標(biāo)URL;而調(diào)用RequestDispatcher.forward 方法的請(qǐng)求轉(zhuǎn)發(fā)過程結(jié)束后,瀏覽器地址欄保持初始的URL地址不變。

(3)HttpServletResponse.sendRedirect方法對(duì)瀏覽器的請(qǐng)求直接作出響應(yīng),響應(yīng)的結(jié)果就是告訴瀏覽器去重新發(fā)出對(duì)另外一個(gè)URL的 訪問請(qǐng)求,這個(gè)過程好比有個(gè)綽號(hào)叫“瀏覽器”的人寫信找張三借錢,張三回信說沒有錢,讓“瀏覽器”去找李四借,并將李四現(xiàn)在的通信地址告訴給了“瀏覽器”。于是,“瀏覽器”又按張三提供通信地址給李四寫信借錢,李四收到信后就把錢匯給了“瀏覽器”??梢?,“瀏覽器”一共發(fā)出了兩封信和收到了兩次回復(fù), “瀏覽器”也知道他借到的錢出自李四之手。RequestDispatcher.forward方 法在服務(wù)器端內(nèi)部將請(qǐng)求轉(zhuǎn)發(fā)給另外一個(gè)資源,瀏覽器只知道發(fā)出了請(qǐng)求并得到了響應(yīng)結(jié)果,并不知道在服務(wù)器程序內(nèi)部發(fā)生了轉(zhuǎn)發(fā)行為。這個(gè)過程好比綽號(hào)叫“瀏覽器”的人寫信找張三借錢,張三沒有錢,于是張三找李四借了一些錢,甚至還可以加上自己的一些錢,然后再將這些錢匯給了“瀏覽器”??梢?,“瀏覽器”只發(fā) 出了一封信和收到了一次回復(fù),他只知道從張三那里借到了錢,并不知道有一部分錢出自李四之手。

(4)RequestDispatcher.forward方法的調(diào)用者與被調(diào)用者之間共享相同的request對(duì)象和response對(duì)象,它們屬于同一個(gè)訪問請(qǐng)求和響應(yīng)過程;而HttpServletResponse.sendRedirect方法調(diào)用者與被調(diào)用者使用各自的request對(duì)象和 response對(duì)象,它們屬于兩個(gè)獨(dú)立的訪問請(qǐng)求和響應(yīng)過程。對(duì)于同一個(gè)WEB應(yīng)用程序的內(nèi)部資源之間的跳轉(zhuǎn),特別是跳轉(zhuǎn)之前要對(duì)請(qǐng)求進(jìn)行一些前期預(yù)處理,并要使用HttpServletRequest.setAttribute方法傳遞預(yù)處理結(jié)果,那就應(yīng)該使用 RequestDispatcher.forward方法。不同WEB應(yīng)用程序之間的重定向,特別是要重定向到另外一個(gè)WEB站點(diǎn)上的資源的情況,都應(yīng)該使用HttpServletResponse.sendRedirect方法。

(5)無論是RequestDispatcher.forward方法,還是HttpServletResponse.sendRedirect方法,在調(diào)用它們之前,都不能有內(nèi)容已經(jīng)被實(shí)際輸出到了客戶端。如果緩沖區(qū)中已經(jīng)有了一些內(nèi)容,這些內(nèi)容將被從緩沖區(qū)中清除。

zend framework 中的應(yīng)用

控制這種分發(fā)過程的動(dòng)作控制器方法是_forward() ;在任意的pre/postDispatch() 或者動(dòng)作中調(diào)用該方法,并傳入動(dòng)作、控制器、模塊、以及可選的附加參數(shù),就可以進(jìn)入新的動(dòng)作。

三種請(qǐng)求轉(zhuǎn)發(fā)得方式

 

  1. public function fooAction() {   
  2.    
  3. // forward to another action in the current controller and module:  
  4.  $this->_forward('bar', null, null, array('baz' => 'bogus'));   
  5. }   
  6.    
  7. public function barAction() {  
  8.    
  9. // forward to an action in another controller:   
  10. // FooController::bazAction(),   
  11. // in the current module:   
  12. $this->_forward('baz', 'foo', null, array('baz' => 'bogus'));   
  13. }   
  14.    
  15. public function bazAction() {  
  16.    
  17. // forward to an action in another controller in another module,   
  18. // Foo_BarController::bazAction():   
  19. $this->_forward('baz', 'bar', 'foo', array('baz' => 'bogus'));   
  20. }  

 

頁(yè)面跳轉(zhuǎn)得方法是

$this->_redirect('/login/add');

【編輯推薦】

  1. 為什么要學(xué)習(xí)SUN-JAVA認(rèn)證?
  2. java認(rèn)證:Java學(xué)習(xí)如何走出第一步
  3. 初學(xué)j2me必讀網(wǎng)友學(xué)習(xí)筆記Java認(rèn)證考試
責(zé)任編輯:金賀 來源: JavaEye博客
相關(guān)推薦

2009-07-03 17:24:31

Servlet頁(yè)面跳轉(zhuǎn)

2009-07-07 13:58:59

jsp forward

2015-04-28 07:50:02

2011-03-15 09:59:52

2021-08-04 08:33:59

TypeScriptConst Readonly

2009-12-03 10:12:24

LinuxUnix

2011-06-08 11:02:14

GetPost

2010-07-30 14:09:30

FlexFlash

2018-11-14 09:46:33

DoSDDoS攻擊

2020-08-12 23:21:49

平臺(tái)即服務(wù)PaaSaPaaS

2024-04-24 11:31:52

Android移動(dòng)開發(fā)

2020-07-09 10:53:05

MPLSIP網(wǎng)絡(luò)

2010-08-12 15:30:27

FlexFlash

2018-09-20 16:10:48

CookiesSession前端

2015-09-23 10:00:47

OLTPOLAP

2019-01-14 15:44:11

CoinToken區(qū)塊鏈

2011-05-26 15:52:31

sleep()wait()

2011-09-05 17:44:49

LinuxUnix

2009-07-06 15:34:56

JSP和Servlet

2009-07-14 15:01:02

AWT和Swing
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)