標籤:瀏覽器 http web應用 應用 導致 部署 時間 app ext
簡單描述
page裡的變數沒法從index.jsp傳遞到test.jsp。只要頁面跳轉了,它們就不見了。
request裡的變數可以跨越forward前後的兩頁。但是只要重新整理頁面,它們就重新計算了。
session和application裡的變數一直在累加,開始還看不出區別,只要關閉瀏覽器,再次重啟瀏覽器訪問這頁,session裡的變數就重新計算了。
application裡的變數一直在累加,除非你重啟tomcat,否則它會一直變大。
而範圍規定的是變數的有效期間限。
如果把變數放到pageContext裡,就說明它的範圍是page,它的有效範圍只在當前jsp頁面裡。
從把變數放到pageContext開始,到jsp頁面結束,你都可以使用這個變數。
如果把變數放到request裡,就說明它的範圍是request,它的有效範圍是當前請求周期。
所謂請求周期,就是指從http請求發起,到伺服器處理結束,返迴響應的整個過程。在這個過程中可能使用forward的方式跳轉了多個jsp頁面,在這些頁面裡你都可以使用這個變數。
如果把變數放到session裡,就說明它的範圍是session,它的有效範圍是當前會話。
所謂當前會話,就是指從使用者開啟瀏覽器開始,到使用者關閉瀏覽器這中間的過程。這個過程可能包含多個請求響應。也就是說,只要使用者不關瀏覽器,伺服器就有辦法知道這些請求是一個人發起的,整個過程被稱為一個會話(session),而放到會話中的變數,就可以在當前會話的所有請求裡使用。
如果把變數放到application裡,就說明它的範圍是application,它的有效範圍是整個應用。
整個應用是指從應用啟動,到應用結束。我們沒有說“從伺服器啟動,到伺服器關閉”,是因為一個伺服器可能部署多個應用,當然你關閉了伺服器,就會把上面所有的應用都關閉了。
application範圍裡的變數,它們的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用。
與上述三個不同的是,application裡的變數可以被所有使用者共用。如果使用者甲的操作修改了application中的變數,使用者乙訪問時得到的是修改後的值。這在其他scope中都是不會發生的,page, request, session都是完全隔離的,無論如何修改都不會影響其他人的資料。
jsp的4個範圍區別
1.page指當前頁面有效。在一個jsp頁面裡有效
2.request 指在一次請求的全過程中有效,即從http請求到伺服器處理結束,返迴響應的整個過程,存放在HttpServletRequest對象中。在這個過程中可以使用forward方式跳轉多個jsp。在這些頁面裡你都可以使用這個變數。
3.Session是使用者全域變數,在整個會話期間都有效。只要頁面不關閉就一直有效(或者直到使用者一直未活動導致會話到期,預設session到期時間為30分鐘,或調用HttpSession的invalidate()方法)。存放在HttpSession對象中
4.application是程式全域變數,對每個使用者每個頁面都有效。存放在ServletContext對象中。它的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用
page、request、session、application的作用範圍
page:使用者請求的當前頁面;
Request:使用者請求訪問的當前組件,以及和當前web組件共用同一使用者請求的web組件。如:被請求的jsp頁面和該頁面用<include>指令包含的頁面以及<forward>標記包含的其它jsp頁面;
Session:同一個http會話中的web組件共用它;
Application:整個web應用的所用web組件共用它。
總結
當資料只需要在下一個forward有用時,用request就夠了;
若資料不只是在下一個forward有用時,就用session。
上下文,環境資訊之類的,用application。
jsp的4個範圍區別( pageScope、requestScope、sessionScope、applicationScope)