ASP  Application对象
Web应用程序(Web Application)并不是真正意义上的Web网站,也不是一个传统的应用程序。可以认为它是一些Web网页和用来完成某些任务的其他资源的一个集合。它隐含这样一层意思:为了能够完成预定义的任务,需要在网页之间预定义一种资源,以记录用户在浏览网页时做出的选择和提供的信息。为此,ASP提供了一个Application对象。它可以在Web应用程序的所有用户之间共享信息,并在服务器运行期间特久保存数据。
1  Application对象成员
ASP提供了一个Application对象,该对象的作用域是一个全局范围,即它不仅可以被单独的用户访问,而且可以被应用程序中所有的所有用户访问。这与一般的应用程序中的全局变量相同。Application对象可以在全局范围内存储变量和信息,该应用程序内所有在ASP页面中运行的脚本都可以访问这些数据。
1.Application对象的事件
Application对象的事件了在它启动和结束时触发的两个事件,如表3-7所示。
表3-7  Application对象的事件
事件
说明
OnStart
当应用程序启动时触发,在用户请求的网页执行之前和任何用户创建Session对象之前。用于初始化变量、创建对象或者运行其他代码。
OnEnd
当应用程序结束时触发。在最后一个用户会话已经结束并且该会话的OnEnd事件中的所有代码已经执行之后发生。其结束时,应用程序中存在的所有变量被取消。
2.Application对象的方法
Application对象的方法允许删除应用程序集合中的值,控制对应用程序集合中变量的并发访问。Application方法及说明如表3-8所示:
表3-8  Application对象的方法
方法
说明
Contents.Remove
Application.Contents集合中删除指定的变量。
Contents.RemoveAll
Application.Contents集合中删除所在变量。
Lock
锁定Application对象,使得只有当前的ASP页面能够进行访问。确保两个用户同时地读取和修改该值而进行的并发操作不会破坏其内容。
Unlock
Unlock( )解除对在Application对象上的ASP网页的锁定。
在运行期间不能从Application.StaticObjects集合中删除变量。
3.Application对象的集合
Application对象提供了两个集合。该集合可以用来访问存储于应用程序中的变量和对象。集合及说明如表3-9所示。
表3-9  Application对象的集合
集合
说明
Contents
没有使用<OBJECT>标记定义的存储于Application对象中的所有变量的一个集合。可以省略Contents,而直接使用Application("VariableName")访问该集合中保存的数据。
StaticObjects
使用<OBJECT>标记定义的存储于Application对象中的所有变量的一个集合。
2  Application对象应用实例
所有用户使用一个公共的Application对象,当网站服务器一开,就创建了Application对象。所有的用户都可以对Application进行修改,利用Application这一特性,可以方便地创建聊天室、网站计数器等常用网页应用程序。
1.用户自定义属性
Application对象没有自己的属性,用户可以根据自己的需要定义属性,来保存一些共有的信息,其语法格式如下:
Application("属性名") = 属性定义
例如:
<%
session和application的区别
Application("greeting")="欢迎你的到来!"
%
上述语句就定义一个名为“greeting”的属性。
需要注意的是,由于Application对象是对于多用户共享的,因此与Session对象有本质的区别。Application变量不会因为某一个甚至全部用户离开就消失,一旦建立了Application变量,那么它就会一直存在,直到网站关闭或者这个Application被卸载。
Application变量终止的情况有三种,服务被终止、Global.asa文件被改变、或者该Application被卸载。
2.Contents集合的应用
大部分Application变量都存放在Contents集合中,当你创建一个新的Application变量时,其实就是在Contents集合中添加了一项。存储在Application集合中的变量在整个应用程序中有效且具有应用程序作用域。下列代码演示两种类型的变量的存储。
<%
Application("greeting") = "Welcome to China!"
Application("num") = 54
%>
获取Application集合中变量的值与获取Request和Response对象集合中的值相同。例如,下面使用For Each循环遍历Contents集合:
<%
For Each item In Application.Contents
Response.Write item & "="& Application.Contents(item) & "<br>"
Next
%>
除此之外,也可以为具有应用程序作用域的变量分配组件实例。如果使用Server.CreateObject方法为变量分配组件实例,则该变量将成为Application.Contents集合的成员。如果变量是用<OBJECT>标记分配的,则该变量将成为Application StaticObjects集合的成员。
如果为Application.Contents集合中的变量分配组件实例,且使用VBScript作为主脚本语言,则必须使用Set关键字。在下列脚本代码中对此进行解释。
<% Set  Application("Obj") = Server.CreateObject("MyComponent") %>
使用Application.Contents集合中组件实例MyComponent的属性和方法如下:
<% Application("Obj").MyObjMethod %>
也可以通过使用该对象的一个本地副本调用它的方法和属性。如下所示:
<%
    Set LocalObj = Application("Obj")
    LocalObj.MyObjMethod
%>
在创建Application组件实例时,不能在Application对象中存储内置对象。
3.网页计数器
网页计数器是Application对象的由一个用途,因为Application是所有的用户所共有的,所以可以存储计数器的值,当有新的用户访问网页时候自动增加计数器的值。
使用Application.lock和Application.Unlock两条语句,防止两个用户同时浏览页面,当前一个正在修改Application的 值,第二个人也同时修改,可能会出现错误,所以当第一个人开始修改时候,使用Application.lock先锁定,当操作完毕以后,在使用Application.Unlock解除锁定。具体代码如下:
<%
Application.lock
Application("counter")=Application("counter")+1
Application.Unlock
%>
然后在网页的相应位置插入输出语句,代码如下:
<p align="center">欢迎光临我的个人主页,您是这里的第<%=Application("counter")%>位贵宾!
</p>
具体的输出效果如图3-7所示。每当页面刷新时候,计数器也会做出相应修改。
图3-7  网页计数器

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。