JSP的四種範圍,分別為page,request,session,application可以用setAttribute("",""); getAttribute("","");其中用page時,標名pageContext.setAttribute("","");它只能在同一個頁面中有效
Request。Request 的範圍是指在一JSP 網頁發出請求到另一個JSP 網頁之間,隨 這個屬性就失效。設定Request 的範圍時可利用request 對象中的setAttribute( )和getAttribute( )
Session 的作用範圍為一段使用者持續和伺服器所串連的時間,但與服務 器斷線 ,這個屬性就無效。只要將資料存入session對象,資料的範圍就為Session
Application 的作用範圍在伺服器一開始執行服務,到伺服器關閉為止Application 的範圍最、停留的時間也最久,所以使用時要特別注意不然可能會造成伺服器負載越來越重的情況。只要將資料存入application對象,資料的範圍範圍 (Scope) 就為Application
application和session比較簡單,這裡主要說明request和page的作用範圍。
application:全域作用範圍,整個應用程式共用,就是在部署檔案中的同一個webApp共用,生命週期為:應用程式啟動到停止。
session:會話範圍,當使用者首次訪問時,產生一個新的會話,以後伺服器就可以記住這個工作階段狀態。生命週期:會話逾時,或者伺服器端強制使會話失效。
request:請求範圍,就是用戶端的一次請求。
page:一個JSP頁面。
以上作用範圍使越來越小, request和page的生命週期都是短暫的,他們之間的區別就是:一個request可以包含多個page頁(include,forward以及filter)。舉個簡單的例子:
jsp1.jsp
<jsp:useBean id="beanID" class="xxx .xxx.BeanClass" scope="request" />
<jsp:include page="jsp2.jsp" />
jsp2.jsp
<jsp:getProperty name="beanID" property="sample" />
運行jsp1.jsp可以正常顯示資料,因為作用範圍是request,相當於調用了request.setAttribute()方法,jsp2頁通過request.getAttribute來獲得這個bean.如果把request改為page,就會拋出NullPointerExceptioin.
一個請求可以跨好幾個JSP(include和forword)和Servlet(如filter).不過這裡有一個需要注意的就是區別 <jsp:include> 和<%@ include %>.如果上面的<jsp:include page="jsp2.jsp" />改為<%@ include file="jsp2.jsp" %>,即使scope為page也是正確的,<%@ include
%>是編譯時間包含,<jsp:include>是運行時包含.前者就相當於宏,編譯時間替代,後者相當於函數,運行時返回.