轉自:page,request,session,application四個域對象的使用及區別
1.page指當前頁面。只在一個jsp頁面里有效 。
2.request 指從http請求到服務器處理結束,返回響應的整個過程。在這個過程中使用forward方式跳轉多個jsp。在這些頁面里你都可以使用這個變量。
3.Session 有效范圍當前會話,從瀏覽器打開到瀏覽器關閉這個過程。
4.application它的有效范圍是整個應用。
作用域里的變量,它們的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用
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都是完全隔離的,無論如何修改都不會影響其他人的數據。
pageContext對象的范圍只適用於當前頁面范圍,即超過這個頁面就不能夠使用了。所以使用pageContext對象向其它頁面傳遞參數是不可能的。
request對象的范圍是指在一JSP網頁發出請求到另一個JSP網頁之間,隨后這個屬性就失效。
session的作用范圍為一段用戶持續和服務器所連接的時間,但與服務器斷線后,這個屬性就無效。比如斷網或者關閉瀏覽器。
application的范圍在服務器一開始執行服務,到服務器關閉為止。它的范圍最大,生存周期最長。