重定向與請求轉(zhuǎn)發(fā)的區(qū)別及什么時(shí)候使用

重定向與請求轉(zhuǎn)發(fā)的區(qū)別

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

轉(zhuǎn)發(fā)過程:客戶瀏覽器發(fā)送http請求——》web服務(wù)器接受此請求——》調(diào)用內(nèi)部的一個(gè)方法在容器內(nèi)部完成請求處理和轉(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ā)行為是瀏覽器只做了一次訪問請求。

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

重定向時(shí)瀏覽器上的網(wǎng)址改變

轉(zhuǎn)發(fā)是瀏覽器上的網(wǎng)址不變

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

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

例子:

response.sendRedirect("loginsuccess.jsp");

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

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

例子:

?????? RequestDispatcherdis=request.getRequestDispatcher(“l(fā)oginsuccess.jsp”);

Dis.forward(request,response);

重定向?qū)嶋H上產(chǎn)生了兩次請求

轉(zhuǎn)發(fā)只有一次請求

重定向:?

  發(fā)送請求 -->服務(wù)器運(yùn)行-->響應(yīng)請求,返回給瀏覽器一個(gè)新的地址與響應(yīng)碼-->瀏覽器根據(jù)響應(yīng)碼,判定該響應(yīng)為重定向,自動(dòng)發(fā)送一個(gè)新的請求給服務(wù)器,請求地址為之前返回的地址-->服務(wù)器運(yùn)行-->響應(yīng)請求給瀏覽器?

轉(zhuǎn)發(fā):?

  發(fā)送請求 -->服務(wù)器運(yùn)行-->進(jìn)行請求的重新設(shè)置,例如通過request.setAttribute(name,value)-->根據(jù)轉(zhuǎn)發(fā)的地址,獲取該地址的網(wǎng)頁-->響應(yīng)請求給瀏覽器?

三:

 重定向時(shí)的網(wǎng)址可以是任何網(wǎng)址

  轉(zhuǎn)發(fā)的網(wǎng)址必須是本站點(diǎn)的網(wǎng)址

重定向與請求轉(zhuǎn)發(fā)使用

前后兩個(gè)頁面 有數(shù)據(jù)傳遞 用請求轉(zhuǎn)發(fā),沒有則用重定向。

比如servlet查詢了數(shù)據(jù)需要在頁面顯示,就用請求轉(zhuǎn)發(fā)。

比如servlet做了update操作跳轉(zhuǎn)到其他頁面,就用重定向。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容