請求轉發和重定向的區別?以及如何使用?
重定向與請求轉發的區別
一
轉發是伺服器行為,重定向是客戶端行為。為什麼這樣說呢,這就要看兩個動作的工作流程:
轉發過程:客戶瀏覽器傳送http請求——》web伺服器接受此請求——》呼叫內部的一個方法在容器內部完成請求處理和轉發動作——》將目標資源傳送給客戶;在這裡,轉發的路徑必須是同一個web容器下的url,其不能轉向到其他的web路徑上去,中間傳遞的是自己的容器內的request。在客戶瀏覽器路徑欄顯示的仍然是其第一次訪問的路徑,也就是說客戶是感覺不到伺服器做了轉發的。轉發行為是瀏覽器只做了一次訪問請求。
重定向過程:客戶瀏覽器傳送http請求——》web伺服器接受後傳送302狀態碼響應及對應新的
重定向時瀏覽器上的網址改變
轉發是瀏覽器上的網址不變
二
重定向,其實是兩次request
第一次,客戶端request A,伺服器響應,並response回來,告訴瀏覽器,你應該去
例子:
response.sendRedirect("loginsuccess.jsp");
請求轉發是伺服器內部把對一個request/response的處理權,移交給另外一個
對於客戶端而言,它只知道自己最早請求的那個A,而不知道中間的B,甚至C、D。傳輸的資訊不會丟失。
例子:
RequestDispatcherdis=request.getRequestDispatcher(“loginsuccess.jsp”);
Dis.forward(request,response);
重定向實際上產生了兩次請求
轉發只有一次請求
重定向:
傳送請求 -->伺服器執行-->響應請求,返回給瀏覽器一個新的地址與響應碼-->瀏覽器根據響應碼,判定該響應為重定向,自動傳送一個新的請求給伺服器,請求地址為之前返回的地址-->伺服器執行-->響應請求給瀏覽器
轉發:
傳送請求 -->伺服器執行-->進行請求的重新設定,例如通過request.setAttribute(name,value)-->根據轉發的地址,獲取該地址的網頁-->響應請求給瀏覽器
三:
重定向時的網址可以是任何網址
轉發的網址必須是本站點的網址
重定向與請求轉發使用
前後兩個頁面 有資料傳遞 用請求轉發,沒有則用重定向。
比如servlet查詢了資料需要在頁面顯示,就用請求轉發。
比如servlet做了update操作跳轉到其他頁面,就用重定向。