跳轉(媛媛提供)

1.同步
(1)頁面----------頁面
(2)頁面----------servlet
三種:

  1. A鏈接
    <a href=”cxx?key=value&key1=value1”>xx
  2. Form表單: input check…
  3. Js的方式實現 A鏈接或者form表單提交:
    (1) Window.location.href=”xxx?key=value…”
    (2) Xxform.submit();

(3)Servlet--------頁面
(4)Servlet--------Servlet
*請求轉發:瀏覽器發出一次請求,轉發動作發生在服務器端,客戶端不知道。
在這裏插入圖片描述

瀏覽器地址欄只保留到Servlet1的地址
轉發是指瀏覽器發送請求到servlet1之後,servlet1需要訪問servlet2,因此在服務器內部跳轉到的servlet2,轉發有時也稱爲服務器內跳轉(用戶不知道)。整個過程瀏覽器只發出一次請求,服務器只發出一次響應。所以,無論是servlet1還是servlet2,整個過程中,只存在一次請求,即用戶所提交的請求。因此servlet1和servlet2均可從這個請求中獲取到用戶提交請求時所攜帶的相關數據。
1)轉發器:RequestDispatcher
2)獲得轉發器的方式?
a. request.getRequestDispatcher(“…”).forward(request,response)
3)ServletContext.getRequestDispatcher(“”).forward…

*重定向:瀏覽器發出第一次請求之後,服務器返回302並且攜帶地址,瀏覽器再次發出請求。兩次請求。 客戶端參與兩次。
在這裏插入圖片描述

重定向是瀏覽器發送請求到servlet1之後,servlet1需要訪問servlet2,但並未在服務器內直接訪問,而是由服務器自動向瀏覽器發送一個響應,瀏覽器再自動提交一個新的請求,這個請求就是對servlet2 的請求。
對於servlet2的訪問,是先由服務器響應客戶端瀏覽器,再由客戶端瀏覽器向服務器發送對servlet2的請求,所以重定向有時又稱爲服務器外跳轉。
整個過程中,瀏覽器共提交了兩次請求,服務器共發送了兩次響應。只不過,第一次響
應與第二次請求,對於用戶來說是透明的,是感知不到的。用戶認爲,自己只提交了一次請求,且只收到了一次響應。
這樣的話,就會有一個問題:servlet2中是無法獲取到用戶手動提交請求中的數據的,它只能獲取到第二次請求中所攜帶的數據。
轉發和重定向的區別
請求轉發:
1.瀏覽器只發出一次請求,收到一次響應
2.請求所轉發到的servlet2中可以直接獲取到請求中所攜帶的數據
3.瀏覽器地址欄顯示的爲用戶所提交的請求路徑servlet1
4.只能跳轉到當前應用的資源中
重定向:
1.瀏覽器發出兩次請求,接收到兩次響應
2.重定向到的servlet2不能直接獲取到用戶提交請求中所攜帶的數據
3.瀏覽器地址欄顯示的爲重定向的請求路徑,而非用戶提交請求的路徑。也正因爲如此,重定向的一個很重要作用是:防止表單重複提交
4.重定向不僅可以跳轉到當前應用的其它資源,也可以跳轉到到其它應用中資源
請求轉發與重定向的選擇
若需要跳轉到其它應用,則使用重定向。
若是處理表單數據的Servlet1要跳轉到另外的Servlet2上,則需要選擇重定向。爲了防止表單重複提交。
若對某一請求進行處理的 Servlet 的執行需要消耗大量的服務器資源(CPU、內存),此時這個 Servlet 執行完畢後,也需要重定向。
其它情況,一般使用請求轉發。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章