Servlet 請求轉發和重定向的區別
先看看怎麼實現的
// 1、容器內請求轉發
request.getRequestDispatcher("url").forward(request,response);
// 2、瀏覽器重定向
response.sendRedirect("url");
共同點:
- 都可以產生頁面跳轉。
不同點:
-
url的變化
- 請求轉發不會發生 url 的改變。
- 重定向的 url 會發生變化。
-
數據傳遞:
- 請求轉發可以攜帶數據
- 重定向不能攜帶數據
-
路徑問題:
- 相對路徑:沒有區別
- 絕對路徑:
- 請求轉發是在容器內部進行轉發的。也就是說在當前web項目下,所以根目錄就是 當前項目 /index.jsp 或者 /servlet/LoginServlet 既可以。
- 重定向是服務器向瀏覽器發送一個 response 響應,然後瀏覽器重新請求服務器,此時是來自服務器外部的請求,根目錄就是當前服務器的根目錄 webapp ,所以就要帶上 當前 module 的項目名稱 如:/webserviceModule/servlet/LoginServlet 或者 /webserviceModule/index.jsp
可以通過兩個示意圖來進行分析:
-
請求轉發示意圖:
-
瀏覽器重定向示意圖:
執行順序:1----->2 -----> 斷開連接 -----> 3 -----> 4。