Web開發中的服務器跳轉與客戶端跳轉

二者比較以下:html

跳轉類型  客戶端請求次數 服務端響應次數 URL變化 站外跳轉            做用域
服務器跳轉     1     1    無   否 pageContext、request、session、application
客戶端跳轉     2     2    有   能 session、application

 

 

 

 

 

請求次數與響應次數服務器

服務端跳轉:客戶端發起一次請求,服務端接收請求後,將結果跳轉到另外一個頁面,做爲這次請求結果返回給客戶端
客戶端跳轉:客戶端發起一次請求,服務端返回這次請求的結果,結果內容是一個URL地址,客戶端拿到此URL,再次發送一次請求,服務端再次響應最終結果給客戶端session

因此,對於服務器跳轉,請求次數和響應次數均是1次,對於 客戶端跳轉,請求次數和響應次數均是2次app

 

URL是否變化jsp

 

服務端跳轉:只是服務端內部不斷進行forward,無論進行多少次forward,客戶端是不知情的,服務端將最後的結果返回給客戶端,即完成這次請求。客戶端的URL沒有變化。
客戶端跳轉:客戶端發起兩次請求,URL發生變化(PS:除非閒得蛋疼,兩次請求的URL地址是同樣的)htm

 

可否進行站外跳轉對象

服務端跳轉:不能進行站外跳轉。服務端請求只能在服務內,將請求響應的結果不斷的跳轉, 使用的都是服務內部的資源。不能跳到其餘服務上去。
客戶端跳轉:能夠。直接跳轉到其餘服務的URL便可blog

 

做用域生命週期

以jsp的四大做用域,關於做用域詳見地址  http://www.cnblogs.com/mengzhen123/p/5968831.html資源

pageContext:當前頁面

request:當前請求

session:當前會話

application:整個應用。狹義的理解爲application的生命週期爲 服務的開啓到關閉

從上面咱們說請求次數和響應次數就能夠知道,對於客戶端跳轉,pageContext、request發生了改變。由於客戶端URL發生了變化,pageContext即發生了變化,客戶端是發送了是兩次請求,request即發生了變化。因此若是使用客戶端跳轉的時候,共享數據建議存放在session中。

服務端爲何沒有發生變化,咱們從selvet實現服務端跳轉方法forward不難看出, forward方法調用時,帶着request、response參數,即不論服務端進行多少次forward,都是使用同一個request、response。因此pageContext、request做用域並無變化。共享數據放在這兩個做用域的對象中,依然能夠取到。

PS:selvet、Struts二、SpringMVC  實現請求跳轉的方式有差別,可是其本質是同樣的。

相關文章
相關標籤/搜索