官术网_书友最值得收藏!

4.6 application內置對象

application對服務器而言,可以視為一個所有聯機用戶共享的數據存取區,application中的變量數據在程序設置其值時被初始化,而當關閉網頁服務器,或者超過預設時間而未有任何用戶聯機時將自動消失,圖4-29所示說明了application的意義。

圖4-29 application對象示意圖

對于每一個聯機瀏覽網頁的用戶來說,application對象用于存儲其共享數據,無論是網站中任何一份網頁,用戶存取的數據內容均相同,可以將其視為傳統應用程序中的全局共享數據。需要注意以下幾個方面:

application對象保存了一份應用系統中的公有數據,一旦創建了application對象,除非服務器關閉,否則application對象將一直保存,并為所有客戶共享。

服務器啟動后就會自動創建application對象,當客戶在所訪問的網站的各個頁面之間瀏覽時,這個application對象都是同一個,直到服務器關閉。但是與session不同的是,所有客戶的application對象都是同一個,即所有客戶共享這個內置的application對象。

在JSP服務器運行時,僅有一個application對象,它由服務器創建,也由服務器自動清除,不能被用戶創建和清除。

4.6.1 存取application中的數據

application對象是通過ServletContext接口衍生而來的,利用此對象所提供的各種方法,便可處理application的數據,下面說明存取application中數據的方式。

1. 建立application變量

除了系統預設的application變量外,要在application中建立變量數據必須使用setAttribute()方法,建立application變量的語法如下:

     application.setAttribute("變量名稱",變量內容)

其中“變量內容”可為字符串或者其他對象類型,下面是設置application變量數據的實例:

上述代碼會在application中建立3個變量數據:id、expire與level。這3個application變量存在于系統當中,各個網頁均能訪問其內容。

2. 返回application中的變量

在設置了application中的變量數據之后,接著在各個網頁中便可利用getAttribute()方法來取得所設置的application變量內容,使用語法如下:

     application.getAttribute("變量名稱")

此方法返回的數據內容為對象(Object)類型,若在網頁中加入下面的程序代碼,則會在瀏覽器上顯示objApp變量存儲的內容。

3. 刪除application變量

要刪除application中的變量數據,必須引用removeAttribute(),語法如下:

     application.removeAttribute("變量名稱")

4. 返回所有application變量

getAttributeNames()方法會返回application中所有變量名稱的集合對象,數據類型為Enumeration。

getAttributeNames()語法如下:

     application.getAttributeNames()

4.6.2 使用application對象取得信息

application對象除了可設置application中的變量數據外,還可用來取得服務器或網頁的信息,用來取得這些信息的常用方法如表4-7所示。

表4-7 使用application對象獲取信息的常用方法

這些方法成員的使用方式相當直接,這里不再進行示范說明,與session的方式相同,其中的差異在于兩者變量存在的有效范圍,用戶可以自行在JSP網頁中進行引用,以了解其返回的結果。

4.6.3 application對象應用實例

【例4-15】存取application對象數據。

把【例4-12】稍作更改。將sessionData.jsp改為applicationData.jsp,采用application.setAttribute()方法設置兩個application變量,usingSession.jsp改為usingApplication.jsp,采用application.getAttribute()方法獲得兩個變量的數據內容(代碼不再詳述)。

首先在瀏覽器中輸入http://localhost:8080/ch04/application/usingApplication.jsp,結果如圖4-30所示,表示未設置application變量。

圖4-30 直接查看usingApplication.jsp的運行結果

在applicationInfo.jsp中輸入數據,瀏覽applicationData.jsp網頁,其中設置了application變量,并且顯示超級鏈接,單擊超級鏈接,將出現usingApplication.jsp,顯示設置好了的數據內容,如圖4-31所示。

圖4-31 設置并獲取application變量

由于application代表整個網站應用程序的共享數據,因此若是重新啟動瀏覽器,當再次查看usingApplication.jsp時,將會看到相同的結果。

【例4-16】創建applicationCount.jsp頁面,利用applicatin對象實現簡單頁面計數器。

applicationCount.jsp的代碼如下:

在瀏覽器中輸入http://localhost:8080/ch04/application/applicationCount.jsp,并不斷刷新,會看到計數器不斷增加。重新開啟新的瀏覽器窗口,計數器也會增加。程序運行結果如圖4-32所示。

圖4-32 applicationCount.jsp執行結果

當然,如果把本例中的application改為sesssion,刷新頁面也能實現頁面計數器。但是開啟新的瀏覽器,會重新從0開始計數,這就說明了session和apllication的作用域是不同的。但是,一般session做計數器是記錄訪問的用戶數而不是訪問的次數。

比較【例4-16】和【例4-14】會發現,用application實現的計數器時,Num采用局部變量;而用session實現的計數器,Num采用全局變量。

通過以上比較,讀者應該能夠掌握session對象和application的區別。

在JSP中application可以在整個應用運行期間保存共享數據,實現用戶間數據的共享;application對象是應用程序級的,如果application中不存在String name,則通過方法Object getAttribute(String name)獲得的對象是null;在同一個網站下的任何地方都可以對application對象進行操作,主要操作有兩個,即下面的兩個方法:Object getAttribute(String name),從application對象中提取指定的對象;void setAttribute(String name, Object value),將對象添加到application對象中。下面通過一個小的應用實例來實現用戶間數據的共享。

【例4-17】application對象常用方法實現共享留言板。此例包括3個程序,代碼分別如下。

inputMessage.jsp代碼如下:

checkMessage.jsp代碼如下:

showMessage.jsp代碼如下:

通過運行inputMessage.jsp輸入用戶和留言信息,運行效果如圖4-33所示。單擊“留言”按鈕,checkMessage.jsp把用戶輸入的信息及時間等保存在Vector對象v中,并且通過application.setAttribute("message", v);保存在application對象中,顯示留言成功,如圖4-44所示。經過多位用戶留言,通過“查看留言板”,showMessage.jsp通過application.getAttribute ("message");取出所有留言信息,并通過循環顯示所有用戶的留言信息,如圖4-35所示。

圖4-33 inputMessage.jsp輸入信息

圖4-35 showMessage.jsp顯示所有留言

圖4-44 顯示聊天內容

圖4-34 checkMessage.jsp留言成功

主站蜘蛛池模板: 桑植县| 安宁市| 贵南县| 高密市| 革吉县| 红河县| 赤城县| 沙河市| 巫山县| 博野县| 顺昌县| 泸西县| 阜平县| 郑州市| 黄大仙区| 烟台市| 宿松县| 滨海县| 乐都县| 五大连池市| 中牟县| 丰都县| 华坪县| 若尔盖县| 温泉县| 隆安县| 平和县| 神池县| 平乡县| 涞水县| 拉萨市| 赫章县| 竹山县| 遂宁市| 青岛市| 夹江县| 皮山县| 凤台县| 闵行区| 盐池县| 北流市|