在進行web開發時,跳轉是最常見的,今天在這裡來學習下2種跳轉,有興趣的朋友可以看看,希望對你有幫助。
第一種是request.getRequestDispatcher().forward(request,response):
1、屬於轉發,也是伺服器跳轉,相當於方法調用,在執行當前文件的過程中轉向執行目標文件,兩個文件(當前文件和目標文件)屬於同一次請求,前後頁共用一個request,可以透過此來傳遞一些資料或者session訊息,request.setAttribute()和request.getAttribute()。
2、在前後兩次執行後,網址列不變,仍是目前檔案的位址。
3、不能轉向到本web應用程式以外的頁面和網站,所以轉向的速度要快。
4、URL中所包含的「/」表示應用程式(項目)的路徑。
第二種是response.sendRedirect():
1、屬於重定向,也是客戶端跳轉,相當於客戶端向服務端發送請求之後,伺服器回傳一個回應,客戶端接收到回應之後又向服務端發送一次請求,總共2次請求,前後頁不共用一個request,不能讀取轉向前透過request.setAttribute()設定的屬性值。
2、在前後兩次執行後,網址列改變,是目標檔案的位址。
3、可以轉向到本web應用程式以外的頁面和網站,所以轉向的速度相對要慢。
4、URL種所包含的"/"表示根目錄的路徑。
特殊的應用:對資料進行修改、刪除、新增操作的時候,應該用response.sendRedirect()。如果是採用了request.getRequestDispatcher().forward(request,response),那麼操作前後的網址列都不會改變,仍然是修改後的控制器,如果此時再對目前頁面刷新的話,就會重新傳送一次請求對資料進行修改,也就是有的人在刷新一次頁面就增加一條資料的原因。
如何採用第二種方式傳遞資料:
#1、可以選擇session,但在第二個檔案中刪除;
2、可以在請求的url中帶上參數,如"add.htm?id=122"
怎麼選擇是重定向還是轉發呢?通常情況下轉送更快,而且能保持request內的對象,所以他是第一選擇。但由於在轉送之後,瀏覽器中URL仍指向開始頁面,此時如果重載目前頁面,開始頁面將會被重新呼叫。如果你不想看到這樣的情況,則選擇轉發。
相關教學:前端影片教學
以上是web開發之轉送和重定向區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!