1. 程式人生 > >forward(轉發)與redirect(重定向)

forward(轉發)與redirect(重定向)



 一、呼叫方式

在servlet中,當我們處理doPost()和doGet()方法時呼叫轉發、重定向的語句如下:

request.getRequestDispatcher("user.jsp").forward(req, resp); //轉發

response.sendRedirect("user.jsp"); //重定向

二、本質區別

轉發是伺服器行為,重定向是客戶端行為:

轉發過程:客戶端傳送http請求—web伺服器接受此請求—呼叫內部的一個方法在容器內部完成請求處理和轉發動作—將目標資源傳送給客戶,在這裡,轉發的路徑必須是同一個web容器下的url,其不能轉向到其他的web路徑上去,中間傳遞的是自己的容器內的request。在瀏覽器路徑欄顯示的仍然是其第一次訪問的路徑。瀏覽器只做了一次訪問請求。請求轉發是伺服器內部把對一個request/response的處理權,移交給另外一個對於客戶端而言,它只知道自己最早請求,而不知道中間的,甚至更多。傳輸的資訊不會丟失。

重定向過程:客戶瀏覽器傳送http請求—web伺服器接受後傳送302狀態碼 (302重定向又稱之為302代表暫時性轉移(Temporarily Moved ),英文名稱:302 redirect。 也被認為是暫時重定向(temporary redirect),一條對網站瀏覽器的指令來顯示瀏覽器被要求顯示的不同的URL,當一個網頁經歷過短期的URL的變化時使用。一個暫時重定向是一種伺服器端的重定向,能夠被搜尋引擎蜘蛛正確地處理) 響應及對應新的地址給客戶瀏覽器—客戶瀏覽器發現是302響應,自動再發送一個新的http請求,請求url是新的地址—伺服器根據此請求尋找資源併發送給客戶端。在這裡地址可以重定向到任意URL,既然是瀏覽器重新發出了請求,則就沒有什麼request傳遞的概念了。在客戶瀏覽器路徑欄顯示的是其重定向的路徑,客戶可以觀察到地址的變化的。重定向其實是兩次request第一次,客戶端request A,伺服器響應,並response回來,告訴瀏覽器,你應該去B。這個時候瀏覽器可以看到地址變了。重定向可以訪問自己web應用以外的資源。在重

定向的過程中,傳輸的資訊會被丟失。

 

在jsp頁面中實現轉發:

<jsp:forward page="user.jsp" />

在jsp頁面中實現重定向:

<%response.sendRedirect("user.jsp"); %>

以上就是對轉發和重定向的一些個人理解,希望能對部分朋友有所幫助!