- JSP應用與開發技術(第3版)
- 馬建紅 李學相 韓穎 王瑞娟 張晗
- 1860字
- 2020-06-30 17:13:26
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留言成功
- 解構產品經理:互聯網產品策劃入門寶典
- SpringMVC+MyBatis快速開發與項目實戰
- JavaScript+jQuery開發實戰
- Instant Typeahead.js
- Data Analysis with Stata
- Python編程與幾何圖形
- Mastering Linux Network Administration
- Mastering JavaScript Design Patterns(Second Edition)
- Python Data Analysis Cookbook
- Instant PHP Web Scraping
- Python+Tableau數據可視化之美
- Exploring SE for Android
- Learning Grunt
- Mastering SciPy
- C# 7.1 and .NET Core 2.0:Modern Cross-Platform Development(Third Edition)