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


兩者比較如下:

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

 

 

 

 

 

請求次數與響應次數

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

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

 

URL是否變化

 

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

 

能否進行站外跳轉

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

 

作用域

以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、Struts2、SpringMVC  實現請求跳轉的方式有差異,但是其本質是一樣的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM