Servlet之轉發和重定向的區別

應該是出自github上的項目JavaGuidegit


 

轉發是服務器行爲,重定向是客戶端行爲。
轉發(Forword) 經過RequestDispatcher對象的forward(HttpServletRequest request,HttpServletResponse response)方法實現的。RequestDispatcher能夠經過HttpServletRequest 的getRequestDispatcher()方法得到。例以下面的代碼就是跳轉到login_success.jsp頁面。
request.getRequestDispatcher("login_success.jsp").forward(request, response);
重定向(Redirect) 是利用服務器返回的狀態嗎來實現的。客戶端瀏覽器請求服務器的時候,服務器會返回一個狀態碼。服務器經過HttpServletRequestResponse的setStatus(int status)方法設置狀態碼。若是服務器返回301或者302,則瀏覽器會到新的網址從新請求該資源。
從地址欄顯示來講
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,而後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,因此它的地址欄仍是原來的地址. redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址.因此地址欄顯示的是新的URL.
從數據共享來講
forward:轉發頁面和轉發到的頁面能夠共享request裏面的數據. redirect:不能共享數據.
從運用地方來講
forward:通常用於用戶登錄的時候,根據角色轉發到相應的模塊. redirect:通常用於用戶註銷登錄時返回主頁面和跳轉到其它的網站等
從效率來講
forward:高. redirect:低.github

相關文章
相關標籤/搜索