scope屬性用於指定JavaBean執行個體對象所儲存的域範圍,其取值只能是page、request、session和application四個值中的一個,其預設值是page。
我可以測試下面代碼:
date.jsp
---------------------------------------------------------
<jsp:useBean id="currentDate" class="java.util.Date" scope="request" />
<%=currentDate.toString() %>
測試結果:
1、當scope=application時,我們瀏覽date.jsp,這時顯示出了系統時間。可是不管我們怎麼重新整理,另外開啟一個瀏覽器,甚至換台機 器,它顯示的時間始終不變,都是當初的時間(即bean剛建立時得到的系統時間),因為scope=application,所以JavaBean的執行個體在記憶體中只有一份,此時只要不重新啟動WEB服務,輸出不會變化。
2、當scope=session時,瀏覽date.jsp,重新整理時顯示也不會變化。可是當我們重新開啟一瀏覽器,即一個新的session,系統便再次建立JavaBean的執行個體,取得當前系統時間,這時將得到正確的時間。同樣,再次重新整理新開啟的頁面,顯示也不會變化。
3、當scope=page/request時,不斷重新整理頁面將不斷得到當前系統時間。
scope屬性的各個設定值的意義和作用:
(1)page表示將JavaBean執行個體對象儲存在PageContext對象中,作用範圍是當前JSP頁面有效。
(2)request表示將JavaBean執行個體Object Storage Service在ServletRequest對象中,儲存在request對象中的JavaBean對象可以被屬於同一個請求的所有Servlet和JSP頁面訪問。
(3)session表示將JavaBean執行個體Object Storage Service在HttpSession對象中,儲存在HttpSession對象中的JavaBean對象可以被屬於同一個會話的所有Servlet和JSP頁面訪問,此設定要求當前JSP頁面支援Session,即沒有將page指令的session屬性設定為false。也就是對一個特定使用者有效,一個http會話。
(4)application表示將JavaBean執行個體Object Storage Service在ServletContext對象中,儲存在ServletContext對象中的JavaBean對象可以被同一個Web應用程式中的所有Servlet和JSP頁面訪問。也就是所有使用者都可以使用。