請求轉發與URL重定向

WEB組件之間有三種跳轉方式:請求轉發;URL重定向;請求包含。跨域

請求轉發

從Servlet1,請求轉發到Servlet2。Servlet1完成一部分的功能,再跳轉到Sservlet2,繼續完成剩餘的功能。瀏覽器

request.getRequestDispatcher(String path).forward(request,response);服務器

特色:優化

  • 瀏覽器地址欄不會發生改變。
  • 請求轉發只發送一個請求。
  • 轉發前和轉發後共享請求中的數據。
  • 最終相應給瀏覽器的由轉發後來決定。
  • 請求轉發不能跨域訪問,只能跳轉到當前應用中的資源。
  • 請求轉發能夠訪問WEB-INF目錄中的資源。

URL重定向

response.sendRedirect(String url);搜索引擎

特色:編碼

  • 瀏覽器地址會發生改變。
  • URL重定向是兩次不一樣的請求。
  • 由於URL重定向是兩次獨立的請求,因此不能共享請求中的數據。
  • 最終相應給瀏覽器的由定後來決定。
  • URL重定向能跨域訪問,能夠訪問其餘應用中的資源。
  • URL重定向不能訪問WEB-INF目錄中的資源。

請求包含

在一個頁面中能夠包含其餘頁面的內容。在Servlet中沒有意義,可是在JSP中有意義。 request.getRequestDispatcher(String path).inclode(request,response);url

選擇方式:若是須要共享請求的數據,使用請求轉發;若是須要訪問WEB-INF中的資源使用請求轉發;若是須要跨域訪問,避免表單的重複提交使用URL重定向。spa


示例:

請求轉發是服務端行爲:用戶發送一個HTTP請求>>>服務器接收到請求>>>調用內部方法在做用域(項目)中完成請求處理和轉發>>>將資源相應給客戶端。服務器轉發的地址只能是域(項目)中的路徑,不能跳轉到其餘域(項目)的路徑上,轉發後的URL地址欄不變,只能經過瀏覽器開發者模式查看到對應請求轉發的地址,客戶端只請求了一次服務端。code

**重定向是客戶端行爲:**用戶發送一個HTTP請求>>>服務器接收到發送302狀態碼相應和重定向的地址>>>客戶端接受到狀態碼和定向的URL地址>>>客戶端從新發送新的HTTP請求(請求的路徑是服務端相應給客戶端的URL路徑)>>>服務端接收到客戶端再次請求的數據並相應給客戶端數據。因此瀏覽器的URL地址欄是會變化,並且在兩次請求中不能共享數據。索引

301,302都是HTTP狀態的編碼,都表明着URL發生了變化。301表示永久性跳轉,302表示暫時性跳轉。若是不是暫時性轉移推薦使用301永久性跳轉,301永久性跳轉對搜索引擎優化更好。

相關文章
相關標籤/搜索