站點(diǎn)所有的用戶(hù)公用一個(gè)application對象,當站點(diǎn)服務(wù)器開(kāi)啟的時(shí)候,application就被創(chuàng )建,直到網(wǎng)站關(guān)閉。利用application這一特性,可以方便地創(chuàng )建聊天室和網(wǎng)站計數器等常用站點(diǎn)應用程序。
可以為application對象添加屬性,application對象常用的方法有兩個(gè):
(1)public void setAttribute(String key, Object obj),將對象obj添加到application對象中,并為添加的對象添加一個(gè)索引關(guān)鍵字key。
(2)public Object getAttribute(String key),獲取application對象中含有關(guān)鍵字key的對象。由于任何對象都可以添加到application中,因此用此方法取回對象的時(shí)候,需要強制轉化為原來(lái)的類(lèi)型。
application的自定義屬性如程序5-19.jsp所示。
案例名稱(chēng):自定義屬性
程序名稱(chēng):5-19.jsp
<%@ page contentType="text/html;charset=GBK" %>
<%
String str = "你好";
application.setAttribute("greeting",str);
%>
<%
String strBack = (String)application.getAttribute("greeting");
out.print(strBack);
%>
程序首先對application的一個(gè)屬性進(jìn)行賦值,然后又將它取出來(lái)輸出到瀏覽器上,程序顯示的結果如圖5-20所示。

圖5-20 自定義屬性
執行完后,該對象就被保存在服務(wù)器上。執行程序5-20.jsp時(shí)依然可以輸出原先保存的值。
案例名稱(chēng):自定義屬性
程序名稱(chēng):5-20.jsp
<%@ page contentType="text/html;charset=GBK" %>
<%
String strBack = (String)application.getAttribute("greeting");
out.print(strBack);
%>
雖然在該程序沒(méi)有賦值,但是依然可以輸出,因為5-19.jsp文件已經(jīng)給application賦值,如圖5-21所示。

圖5-21 讀取application屬性的值
application變量不會(huì )因為某一個(gè)甚至全部用戶(hù)離開(kāi)而消失,一旦建立application變量,那么它就一直存在到網(wǎng)站關(guān)閉或者這個(gè)application對象被卸載,經(jīng)??赡苁菐字芑蛘邘讉€(gè)月。
聊天室允許多用戶(hù)實(shí)時(shí)進(jìn)行信息交流,所有用戶(hù)可以看到彼此的信息,這與application對象的特點(diǎn)正好符合,所以可以方便地利用application實(shí)現聊天室,如程序5-21.jsp所示。
案例名稱(chēng):簡(jiǎn)易聊天室
程序名稱(chēng):5-21.jsp
<%@ page contentType="text/html;charset=GBK" %>
<HTML>
<BODY>
<%
if(application.getAttribute("chat")!=null){
if(request.getParameter("mywords")!=null){
String mywords = request.getParameter("mywords");
mywords = (String)application.getAttribute("chat") + "<br>" + mywords;
application.setAttribute("chat", mywords);
out.print((String)application.getAttribute("chat"));
}
}
%>
<FORM ACTION="5-21.jsp" METHOD="get">
<INPUT TYPE="TEXT" SIZE="30" NAME="mywords" VALUE="I LIKE CHAT">
<INPUT TYPE="SUBMIT" name="submit" VALUE="提交">
</FORM>
</BODY>
</HTML>
這時(shí)就可邀請一個(gè)朋友進(jìn)入聊天室,雖然比較簡(jiǎn)易,不過(guò)已經(jīng)實(shí)現了聊天室的功能,執行的結果如圖5-22所示。

圖5-22 簡(jiǎn)易聊天室
案例5-3:網(wǎng)頁(yè)計數器
網(wǎng)頁(yè)計數器是application 對象的又一個(gè)用途,因為application是所有的用戶(hù)共有的,所以可以存儲計數器的值,當有新用戶(hù)訪(fǎng)問(wèn)網(wǎng)頁(yè)時(shí)自動(dòng)增加計數器的值,如程序CountV1.jsp所示。
案例名稱(chēng):網(wǎng)頁(yè)計數器版本一
程序名稱(chēng):CountV1.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML>
<BODY>
<%
Integer number=(Integer)application.getAttribute("Count");
if(number==null) {
number=new Integer(1);
application.setAttribute("Count",number);
}
else {
number=new Integer(number.intValue() + 1);
application.setAttribute("Count",number);
}
%>
您是第<%=(Integer)application.getAttribute("Count")%>
個(gè)訪(fǎng)問(wèn)本站的客戶(hù)。
</BODY>
</HTML>
程序顯示結果如圖5-23所示。

圖5-23 網(wǎng)頁(yè)計數器
一般網(wǎng)站的計數器都是圖形界面,這個(gè)計數器也可以變成具有圖形界面的計數器,如程序CountV2.jsp所示。
案例名稱(chēng):網(wǎng)頁(yè)計數器版本二
程序名稱(chēng):CountV2.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<HTML><BODY>
<%!
String G(Integer counter)
{
String S, myimage;
myimage = "";
S = counter.toString() ;
for(int i = 0; i<S.length(); i++)
{
myimage = myimage + "<IMG SRC=" + S.charAt(i) + ".gif>";
}
return myimage;
}
%>
<%
Integer number=(Integer)application.getAttribute("Count");
if(number==null) {
number=new Integer(1);
application.setAttribute("Count",number);
}
else {
number=new Integer(number.intValue() + 1);
application.setAttribute("Count",number);
}
%>
您是第<%=G((Integer)application.getAttribute("Count"))%>
個(gè)訪(fǎng)問(wèn)本站的客戶(hù)。
</BODY></HTML>
函數G首先取出application("Count")的值,然后賦值給變量S,再執行循環(huán)語(yǔ)句,S.length()功能是取字符串的長(cháng)度,S.charAt(i)的意思是從字符串S的第i個(gè)位置開(kāi)始取1個(gè)字符。執行完后就將原先的字符數字轉化成以圖形顯示的圖形計數器。本程序執行需要有0~9的十個(gè)Gif圖片,運行的結果如圖5-24所示。

圖5-24 基于圖形界面的計數器
聯(lián)系客服