JSP中的四大作用域:page、request、session、application

衆所周知,爲了在頁面、請求、和用戶之間傳遞和共享數據,JSP提供了四個不同的作用域:page(頁面作用域)、request(請求作用域)、session(會話作用域)、application(應用程序作用域),這些作用域就規定了數據可以傳遞和共享的範圍以及數據的存活時間。

jsp默認的作用域是page(頁面作用域),這個作用域中的對象只能在該頁面中使用,不允許在其他頁面使用。我們可以通過調用pageContext這個隱含的對象的getAttribute()和setAttribute()方法去獲取和設置需要傳遞、共享具有這種範圍類型的數據。(pageContext對象還提供了訪問其他範圍對象的getAttribute方法)。page範圍內的對象,在客戶端每次請求JSP頁面時創建,在頁面向客戶端發送迴響應或請求被轉發(forward)到其他的資源後被刪除。

request(請求作用域)作用於那些需要在 所有處理同一個request請求的頁面中 都可以使用的對象。request作用域的隱含對象是request。要注意的是,因爲請求對象對於每一個客戶請求都是不同的,所以對於每一個新的請求,都要重新創建和刪除這個範圍內的對象。

session(會話作用域)的對象可用於同一個瀏覽器發出的所有請求。Session 的作用範圍爲一段用戶持續和服務器所連接的時間,但與服務 器斷線 ,這個屬性就無效。當瀏覽器發出第一個請求時,就認爲session的作用時間已經開始了,但是它的結束時間還是不太好判斷,畢竟服務器也不是瀏覽器他爸,瀏覽器關閉並不會通知他。所以我們可以學習類似於處理“系統響應超時”這種情況的方法,設置:如果一定的時間內客戶端沒有反應,則認爲會話結束。Tomcat的默認值爲120分鐘,但這個值也可以通過HttpSession的setMaxInactiveInterval()方法來設置最大時長。

application(應用程序作用域)中的對象作用於這個應用程序的所有用戶,從服務器一開始執行服務,一直到服務器關閉爲止。從這看來,application的作用範圍最廣,作用的時間也最長。所以使用時要特別注意不然可能會造成服務器負載越來越重的情況。

注意:根據jsp規範,用於某個對象的名稱必須在所有作用域中都是唯一的。也就是說,如果application作用域中有一個名爲user的對象,而且在request作用域中用相同的名稱保存着另一個對象,那麼容器可能會移除第一個對象,儘管很少有容器會執行這項規則,但是爲了使您的項目更加完善,還是應該確保在任何地方都是用唯一的名稱,除非所保存的對象爲同一個。

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