1. 程式人生 > >JAVAWEB學習(5) — 轉發和重定向

JAVAWEB學習(5) — 轉發和重定向

轉發和重定向

1. 轉發

1.1 什麼是轉發

一個web元件將未完成的處理通過容器交給另外一個web元件繼續做

web元件指的是servlet或者是jsp

通常是一個servlet獲得資料之後轉發給一個jsp來展現

1.2 如何轉發

  1. 繫結資料到請求物件上

    //name:繫結名
    //obj:繫結值
    request.setAttribute(String name,Object obj);
    String request.getAttribute(String name);
    
  2. 獲得轉發器

    //url是轉發地址,通常是一個jsp
    RequestDispatcher rd =
    request.getRequestDispatcher(String url);
  3. 轉發

    rd.forward(request,response);
    

    在這裡插入圖片描述

1.3 轉發的特點

  • 轉發的地址是有限制的,要求屬於同一個web應用。
  • 轉發之後,瀏覽器位址列的地址不變

2. 重定向

2.1 什麼是重定向

伺服器通知瀏覽器向某個地址傳送請求。

伺服器可以通過傳送302狀態碼及Location訊息頭(該訊息頭的值是一個地址,一般稱之為重定向地址)給瀏覽器,瀏覽器收到之後,會立即向重定向地址傳送請求

在這裡插入圖片描述

2.2 如何重定向

//url用來指定重定向地址
response.sendRedirect(String url);

2.3 重定向的一個細節

重定向之前,容器會先清空response物件上存放的所有資料

實體內容為空

3. 轉發和重定向的區別

在這裡插入圖片描述

兩種跳轉獲得物件的方式

//獲得轉發物件getRequestDispatcher()
HttpServletRequest(httpServletRequest).getRequestDispatcher
ServletContext.getRequestDispatcher();
 
//獲得重定向物件sendRedirect()
HttpServletResponse(
httpServletResponse).sendRedirect();
  • 轉發使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect()
  • 轉發:瀏覽器URL的位址列不變。重定向:瀏覽器URL的位址列改變
  • 轉發是伺服器行為,重定向是客戶端行為
  • 轉發更高效。轉發是瀏覽器只做了一次訪問請求。重定向是瀏覽器做了至少兩次的訪問請求的
  • 轉發2次跳轉之間傳輸的資訊不會丟失,重定向2次跳轉之間傳輸的資訊會丟失(request範圍)
  • 請求轉發的path只能是當前專案中的path,而重定向location可以是專案外的地址

4. 轉發和重定向的選擇

  1. 重定向的速度比轉發慢,因為瀏覽器還得發出一個新的請求,所以如果在使用轉發和重定向都無所謂的時候建議使用轉發
  2. 因為轉發只能訪問當前WEB的應用程式,所以不同WEB應用程式之間的訪問,特別是要訪問到另外一個WEB站點上的資源的情況,這個時候就只能使用重定向了