總結page,request,session,application四個域對象的使用及區別

1.簡單說 page指當前頁面。在一個jsp頁面裏有效 
2.request 指從http請求到服務器處理結束,返回響應的整個過程。在這個過程中使用forward方式跳轉多個jsp。在這些頁面裏你都可以使用這個變量。 
3.Session 有效範圍當前會話,從瀏覽器打開到瀏覽器關閉這個過程。 
4.application它的有效範圍是整個應用。 
作用域裏的變量,它們的存活時間是最長的,如果不進行手工刪除,它們就一直可以使用 


page裏的變量沒法從index.jsp傳遞到test.jsp。只要頁面跳轉了,它們就不見了。 

request裏的變量可以跨越forward前後的兩頁。但是隻要刷新頁面,它們就重新計算了。 

sessionapplication裏的變量一直在累加,開始還看不出區別,只要關閉瀏覽器,再次重啓瀏覽器訪問這頁,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都是完全隔離的,無論如何修改都不會影響其他人的數據。

問題:pagerequestsessionapplication的作用範圍?

書中解答,此處只摘錄重要語句:

page:用戶請求的當前頁面;

Request:用戶請求訪問的當前組件,以及和當前web組件共享同一用戶請求的web組件。如:被請求的jsp頁面和該頁面用<include>指令包含的頁面以及<forward>標記包含的其它jsp頁面; 

Session:同一個http會話中的web組件共享它;
Application:整個web應用的所用web組件共享它。

此處我舉個例子說明

一個網站MyWebSite,其包含7jsp頁面,分別爲master.jsptop.jspmain.jspfoot.jsplogin.jspsuccess.jspnews.jspmaster.jsp頁面通過<include>指令包含top.jspmain.jspfoot.jsp三個頁面,當用戶通過login.jsp登錄成功後,進入success.jsp頁面然後通過此頁面的<forward>標籤跳轉到master.jsp頁面中。

我們在success.jsp頁面中加入如下代碼(此處用到jstl標籤) 

<c:set value="aaa" var="test1" scope=”page” />
<c:set value="aaa" var="test2" scope=”request” />
<c:set value="aaa" var="test3" scope=”session” />
<c:set value="aaa" var="test4" scope=”application” />

<jsp:forward page=”master.jsp”/ >這裏一一說明

1.變量 test1 只在success.jsp內有效;
2.變量 test2 success.jspmaster.jsptop.jspmain.jspfoot.jsp中有效;
3.變量 test3 7個頁面中都有效(包括login.jspnews.jsp)
4.變量 test4 在整個網站,當前也就是7個頁面中都有效(包括login.jspnews.jsp)

Test3test4有效範圍一樣,有什麼區別呢?

其實區別蠻大的,我只說明一點,假如此時又有另一個用戶訪問master.jsp頁面,那麼test3相對於這個用戶來說就無效,而test4卻是有效的。或者當第一個登錄的用戶關閉瀏覽器後,再重新訪問master.jsp時,test3就無效,而test4卻有效。

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