JSP中的四種屬性範圍(重點)

3.1、四種屬性範圍(重點

       所謂的屬性範圍,就是指一個對象可以跨多少個JSP頁面之後可以繼續使用。

3.1.1、操作方法

       在整個JAVA WEB中屬性操作使用如下的方法:
              · 設置屬性:public void setAttribute(String name,Object attribute)
              · 取得屬性:public Object getAttribute(String name)
              · 刪除屬性:public Object removeAttribute(String name)
       JSP中有以下四個對象都支持以上的三個方法:
              · pagepageContext
              · request
              · session
              · application

3.1.2page屬性範圍

       在一個JSP頁面上設置的屬性只能在一個頁面取得,跳轉到其他頁面則此屬性消失。
PageScopeDemo01.jsp
<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

<%

         // 設置兩個屬性

         pageContext.setAttribute("uname","HELLO") ;

         pageContext.setAttribute("udate",new Date()) ;

         // 取得屬性

         String name = (String)pageContext.getAttribute("uname") ;

         Date date = (Date)pageContext.getAttribute("udate") ;

%>

<h1>name --> <%=name%></h1>

<h1>date --> <%=date%></h1>

       當前頁可以取得所設置的屬性,下面對頁面進行修改,讓其完成一此跳轉。
PageScopeDemo02.jsp

<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

<%

         // 設置兩個屬性

         pageContext.setAttribute("uname","HELLO") ;

         pageContext.setAttribute("udate",new Date()) ;

%>

<jsp:forward page="PageScopeDemo03.jsp"/>

PageScopeDemo03.jsp

<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

<%

         // 取得屬性

         String name = (String)pageContext.getAttribute("uname") ;

         Date date = (Date)pageContext.getAttribute("udate") ;

%>

<h1>name --> <%=name%></h1>

<h1>date --> <%=date%></h1>

       證明:一個頁面上設置的屬性,只能在本頁面中取得。如果現在希望可以在跳轉頁中取得,則可以擴大範圍到request範圍上去。

3.1.3request屬性範圍

       request可以把屬性保存在一次服務器跳轉範圍之中。
RequestScopeDemo01.jsp

<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

<%

         // 設置兩個屬性

         request.setAttribute("uname","HELLO") ;

         request.setAttribute("udate",new Date()) ;

%>

<jsp:forward page="RequestScopeDemo02.jsp"/>

RequestScopeDemo02.jsp

<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

<%

         // 取得屬性

         String name = (String)request.getAttribute("uname") ;

         Date date = (Date)request.getAttribute("udate") ;

%>

<h1>name --> <%=name%></h1>

<h1>date --> <%=date%></h1>

但是,需要注意的是,如果使用了下面的跳轉形式,則不能夠取得:
RequestScopeDemo03.jsp
<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

<%

         // 設置兩個屬性

         request.setAttribute("uname","HELLO") ;

         request.setAttribute("udate",new Date()) ;

%>

<a href="RequestScopeDemo02.jsp">RequestScopeDemo02.jsp</a>

       發現以上程序執行之後,地址欄改變了,但是設置的屬性也消失了。
       如果現在希望無論怎樣跳轉,屬性都可以被保存下來,則就要擴大到session範圍

3.1.4session屬性範圍

       session屬性範圍無論頁面怎樣跳轉,都可以保存下來,但是隻針對於同一個瀏覽器打開的相關頁面。
SessionScopeDemo01.jsp

<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

<%

         // 設置兩個屬性

         session.setAttribute("uname","HELLO") ;

         session.setAttribute("udate",new Date()) ;

%>

<a href="SessionScopeDemo02.jsp">SessionScopeDemo02.jsp</a>

SessionScopeDemo02.jsp

<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

<%

         // 取得屬性

         String name = (String)session.getAttribute("uname") ;

         Date date = (Date)session.getAttribute("udate") ;

%>

<h1>name --> <%=name%></h1>

<h1>date --> <%=date%></h1>

       可以把每一個用戶理解爲一個session。如果現在希望所有的用戶都可以看見,則就可以繼續擴大範圍 —— application範圍。

3.1.5application屬性範圍

       application範圍,是把屬性設置在整個服務器上,所有的用戶都可以進行訪問。
ApplicationScopeDemo01.jsp

<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

<%

         // 設置兩個屬性

         application.setAttribute("uname","HELLO") ;

         application.setAttribute("udate",new Date()) ;

%>

ApplicationScopeDemo02.jsp

<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

<%

         // 取得屬性

         String name = (String)application.getAttribute("uname") ;

         Date date = (Date)application.getAttribute("udate") ;

%>

<h1>name --> <%=name%></h1>

<h1>date --> <%=date%></h1>

       如果服務器一關閉,則所有的application屬性都消失,屬性保存在服務器之上,如果此屬性保存的內容過多,則肯定會直接影響到服務器的性能。所以一般儘可能少設置application屬性。

3.1.6pageContext對象的補充

       JSP中如果要想設置一個page範圍的屬性則一定使用pageContext對象,實際上對於整個JSP代碼,所有的四種屬性範圍都是可以通過pageContext對象進行設置的,因爲在此對象中的設置屬性方法有兩個:
       · public void setAttribute(String name,Object attribute) à 設置的屬性默認爲page範圍
· public void setAttribute(String name,Object o,int scope) à 可以指定屬性的範圍
       |- PageContext類中提供了以下幾個常量:
              |- 表示page範圍:public static final int PAGE_SCOPE
              |- 表示request範圍:public static final int REQUEST_SCOPE
              |- 表示session範圍:public static final int SESSION_SCOPE
              |- 表示application範圍:public static final int APPLICATION_SCOPE
下面通過pageContext對象設置一個request範圍的屬性
RequestScopeDemo04.jsp
<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

<%

         // 設置兩個屬性

         pageContext.setAttribute("uname","HELLO",PageContext.REQUEST_SCOPE) ;

         pageContext.setAttribute("udate",new Date(),PageContext.REQUEST_SCOPE) ;

%>

<jsp:forward page="RequestScopeDemo02.jsp"/>

使用的原則:
       · 因爲四種屬性範圍的保存時間不同,所以佔用內存的時間也就不同了,能使用request就不要使用session,一般情況下,requestsession兩個屬性範圍使用的頻率是最高的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章