使用Application对象
Application对象拥有与Application所有相关的集合,方法,以及事件。下面的部分你将学会怎样使用Application对象来创建application变量和application事件。
对Application变量的介绍
一个application变量包含的数据可以在整个application中被所有用户享用。Application对象包括任何类型,包括队列和对象。一个application变量和一个Session变量区别有以下两点:
■和Session不同的是,Application变量不需要Cookies。网站不需要利用Application变量来跟踪用户进程。这就意味着使用起来很安心,可以适应任何浏览器。
■和一个Session变量不同的是,application变量可以被多个用户共享。从一个用户接受到的application变量可以传递给另外的用户。
注意
对Session的了解在第16章。
下面是利用Application的普通应用:
■一个application变量可以用来在每个主页上显示瞬态信息,例如,你可以利用application变量来对于每一个主页进行当日新闻的更新。
■Application可以用来记录广告条被点击的时间和次数。“参看第21章”
■Application可以从数据库中读取数据,例如,你可以从你的网站的数据库中接受销售品目录然后利用application变量显示在多个主页上。
■一个Application变量可以用来统计目前上站人数,可以参见后面的小节。
■一个application变量可以用于网站上不同用户间的通讯,你这样就可以创建多用户游戏以及多用户聊天室,可以参看后面聊天室的应用小节。
创建和读取Application变量
其实这部分相当简单,因为读者您读到这里已经有相当基础了,创建读取过程和以往的Session变量没什么区别,见下面的例子应用:
<HTML>
<HEAD><TITLE>Application示例</TITLE></HEAD>
<BODY>
<%
Application(“Greeting”)=”Welcome!”
%>
<%=Application(“Greeting”)%>
</BODY>
</HTML>
在这个示例中,一个新的名字为Greeting的application变量被创建,赋值为”Welcome!”。然后这个变量值”Welcome!”显示在浏览器上。
一旦变量被赋值,它就可以在任何ASP文件中显示出来,即使是其他用户调用。例如,这时候另外一个用户调用下面的ASP文件,也可以显示”Welcome!”信息:
<HTML>
<HEAD><TITLE>另外一页</TITLE></HEAD>
<BODY>
<%=Application(“Greeting”) %>
</BODY>
</HTML>
很重要的需要理解的是,由于Application变量是对于多用户共享的,因此与Session变量有着本质的区别。同时application变量不会因为某一个甚至全部用户离开就消失,一旦建立了application变量,那么它就会一直存在到网站关闭或者这个application被卸载。这经常可能是几周或者几个月。
由于application变量创建时不会自己消亡,因此你就要特别小心的使用,这可是占用内存的,你可要斟酌使用以免降低服务器对其他工作的响应速度。
注意
Application变量终止的情况有三种,服务被终止,Global.asa被改变,或者该Application被卸载。
为了更好的了解多用户共享这个概念,,我们拿出下面这个脚本例子:
<%
Randomize
If INT(2*RND)=1 THEN
Application(“FavoriteColor”)=”Blue”
Else
Application(“FavoriteColor”)=”Red”
END IF
%>
很容易理解的是,如果将Application换成Session,那么对于每一个单独用户来说,值很可能是不一样的,但是这里面由于是Application,那么不管多少个用户调用该脚本,大家的该变量都是一样的,即使后来的访问者调用时颜色与前面人调用的不一样,那么由于这种共享变量,自然对于其他人来说就相当于进行变量值的改变。不过,现在细心的读者也许会发现这里面有些问题,即:如果多人同时调用,那么岂不是要乱了。例如下面这个例子:假如你正在使用一个application来记录一个广告条的点击次数,如果两个人正在同时点击,那么冲突怎么办?
<%
NumClicks=Application(“BannerClicks”)
NumClicks=NumClicks+1
Application(“BannerClicks”)=NumClicks
%>
可以看出,每一次点击,该变量值加1,但是如果这个脚本被同时进行,即多人同时点击,幸好有两个Application方法专门应付这种问题,分别是Lock方法和Unclock方法,用来暂时防止其他用户对application变量的改变,那么前面的例子正确形式应该如下:
<%
Application.Lock
NumClicks=Application(“BannerClicks”)
NumClicks=NumClicks+1
Application(“BannerClicks”)=NumClicks
Application.UnLock
%>
脚本的第一行将application进行lock操作,那么其他用户就无法对application变量进行修改直到Unclock操作或者该ASP文件执行结束。
请注意你不能针对个别变量进行Lock操作,也就是说,要不全都Lock,要不全都不。前面的脚本其实也就是防止用户修改该Application的所有变量。
了解Lock方法注意不是永远不让其他用户进行Application变量的修改,而是让修改过程连续有序,防止冲突。