天天看點

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

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

       在整個JAVA WEB中屬性操作使用如下的方法:

              · 設定屬性:public void setAttribute(String name,Object attribute)

              · 取得屬性:public Object getAttribute(String name)

              · 删除屬性:public Object removeAttribute(String name)

       在JSP中有以下四個對象都支援以上的三個方法:

              · page(pageContext)

              · request

              · session

              · application

       在一個JSP頁面上設定的屬性隻能在一個頁面取得,跳轉到其他頁面則此屬性消失。

<b>PageScopeDemo01.jsp</b><b>:</b>

&lt;%@page contentType="text/html;charset=GBK"%&gt;

&lt;%@page import="java.util.*"%&gt;

&lt;%

         // 設定兩個屬性

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

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

         // 取得屬性

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

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

%&gt;

&lt;h1&gt;name --&gt; &lt;%=name%&gt;&lt;/h1&gt;

&lt;h1&gt;date --&gt; &lt;%=date%&gt;&lt;/h1&gt;

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

<b>PageScopeDemo02.jsp</b><b>:</b>

&lt;jsp:forward page="PageScopeDemo03.jsp"/&gt;

<b>PageScopeDemo03.jsp</b><b>:</b>

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

       request可以把屬性儲存在一次伺服器跳轉範圍之中。

<b>RequestScopeDemo01.jsp</b><b>:</b>

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

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

<b>&lt;jsp:forward page="RequestScopeDemo02.jsp"/&gt;</b>

<b>RequestScopeDemo02.jsp</b><b>:</b>

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

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

但是,需要注意的是,如果使用了下面的跳轉形式,則不能夠取得:

<b>RequestScopeDemo03.jsp</b><b>:</b>

<b>&lt;a href="RequestScopeDemo02.jsp"&gt;RequestScopeDemo02.jsp&lt;/a&gt;</b>

       發現以上程式執行之後,位址欄改變了,但是設定的屬性也消失了。

       如果現在希望無論怎樣跳轉,屬性都可以被儲存下來,則就要擴大到session範圍

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

<b>SessionScopeDemo01.jsp</b><b>:</b>

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

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

&lt;a href="SessionScopeDemo02.jsp"&gt;SessionScopeDemo02.jsp&lt;/a&gt;

<b>SessionScopeDemo02.jsp</b><b>:</b>

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

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

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

       application範圍,是把屬性設定在整個伺服器上,所有的使用者都可以進行通路。

<b>ApplicationScopeDemo01.jsp</b><b>:</b>

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

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

<b>ApplicationScopeDemo02.jsp</b><b>:</b>

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

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

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

       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範圍的屬性

<b>RequestScopeDemo04.jsp</b><b>:</b>

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

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

&lt;jsp:forward page="RequestScopeDemo02.jsp"/&gt;

使用的原則:

       · 因為四種屬性範圍的儲存時間不同,是以占用記憶體的時間也就不同了,能使用request就不要使用session,一般情況下,request和session兩個屬性範圍使用的頻率是最高的。

本文轉自 李興華 51CTO部落格,原文連結:http://blog.51cto.com/lixinghua/101383,如需轉載請自行聯系原作者