Application Object (IIS)

你可以使用Application对象,在给定应用程序的所有用户之间分享信息。一个基于ASP的应用程序被定义为一个虚拟目录和它的子目录中的所有的.asp文件。因为可以有多个用户共享Application对象,所以Lock方法和Unlock方法用来确保多个用户不能同时修改一个属性。

方法

Application对象定义了下面这些方法。

方法描述
Application.Contents.RemoveApplication对象的Contents集合中删除一个项。
Application.Contents.RemoveAllApplication对象的Contents集合中删除所有项。
Application.Lock防止别的客户端修改Application对象的属性。
Application.Unlock允许别的客户端修改Application对象的属性。

属性

Application对象定义了下面这些属性。

属性描述
Application.Contents集合包含了所有的通过脚本命名添加到应用程序的项。
Application.StaticObjects集合包含所有的用<OBJECT>标签添加到会话的对象。

事件

Application对象定义了下面这些事件。

事件描述
Application_OnEnd Event在应用程序退出时发生,在Session_OnEnd事件之后。只在Application对象和Server对象的内置对象可用。
Application_OnStart Event在第一个新会话创建之前发生,也就是说,在Session_OnStart事件之前。只有Application对象和Server对象的内置对象可用。在Application_ONStart事件脚本中引用Session对象、Request对象或Response对象,会引发一个错误。

备注

你可以在Application集合中存储值。存储在Application集合中的信息在整个应用程序中都可用,具有应用程序作用范围。下面的脚本演示了存储两类变量。

VBScript
<% 
Application("greeting") = "Welcome to My Web World!" 
Application("num") = 25 
%>

这些变量每个都是Application.Contents集合的成员。

你可以向一个变量指派一个组件实例,它也具有应用程序使用范围。如果你用Server.CreateObject方法向一个变量指派一个组件实例,这个变量将成为Application.Contents集合的一个成员。如果用<OBJECT>标签指派变量,该变量将成为Application.StaticObjects集合的成员。

在把组件实例指派给带有应用程序作用范围的变量的时候,你必须小心,因为有些组件不被设计为给定的应用程序作用范围。欲进一步了解,请参阅平台软件开发Kit(SDK)。

如果你在Application.Contents 集合中把一个组件实例指派给一个变量,并使用Microsoft ® Visual Basic ® Scripting Edition (VBScript)作为你的首选脚本语言,你必须使用Set关键词,如下面的脚本所演示的。

VBScript
<% Set Application("Obj1") = Server.CreateObject("MyComponent") %>

然后你可以引用MyComponent的方法和属性。

VBScript
<% Application("Obj1").MyObjMethod %>

或者你可以后面的网页中引用MyComponent的方法和属性,只要使用以下的脚本提取出对象的本地副本:

VBScript
<%  
Set MyLocalObj1 = Application("Obj1")  
MyLocalObj1.MyObjMethod 
%>

其它创建带有应用程序作用范围的对象的方法,是在Global.asa文件中使用<OBJECT>标签。欲进一步了解,请参阅Global.asa句法

你不能在Application对象中存储内建对象。比如说,下面的行会返回错误:

VBScript
<% 
Set Application("var1") = Session 
Set Application("var2") = Request 
Set Application("var3") = Response 
Set Application("var4") = Server 
Set Application("var5") = Application 
Set Application("var6") = ObjectContext 
%>

你必须意识到一些你给应用程序作用范围的组件所用的线程模型。用来开发组件的线程模型将有一个显著的影响,影响一个组件实例是否需要被指派到Application集合的一个变量中。

欲进一步了解,请参阅在ASP网页中设置COM对象的作用范围。欲得到可以在ASP中调用的COM组件的代码示例,请参阅 为ASP创建COM组件

如果你在一个Application对象是存储一个数组,你不能试图直接修改存储的数组中的元素。举个例子:下面的脚本不能起作用:

VBScript
<% Application("StoredArray")(3) = "new value" %>

前面的脚本不起作用,是因为Application对象是作为一个集合实现的。数组元素StoredArray(3)不能接受新值。而是,该值被包含在Application对象的集合中,并覆盖任何以前写在那个位置的信息。

强烈建议你,如果你把一个数组存储在Application对象中,在你读取或者修改数组中的元素之前,你得取回数据的副本。如果你操作完了这个数组,你必须再次把数组存储到Application对象中,从而保存你所作的修改,如下面的脚本所示:

VBScript
--- File1.asp --- 
<% 
'创建一个数组并初始化它。
dim MyArray() 
Redim MyArray(5) 
MyArray(0) = "hello" 
MyArray(1) = "some other string" 

'在Application对象中存储数组
Application.Lock 
Application("StoredArray") = MyArray 
Application.Unlock 

Server.Transfer("file2.asp") 
%>
VBScript
--- File2.asp --- 
<% 
'从Application对象中读取数组
'并修改它的第二个元素。
LocalArray = Application("StoredArray") 
LocalArray(1) = " there" 

'打印出字符串"hello there." 
Response.Write(LocalArray(0)&LocalArray(1)) 

'再次把数组存储到Application对象中。
'这样把StoreArray中的值用新值覆盖掉了。
Application.Lock 
Application("StoredArray") = LocalArray 
Application.Unlock 
%>

示例代码

下面的示例使用应用程序变量NumVisiteds来存储特定的网页被访问的次数。调用了Lock方法以确保只有当前的客户端可以访问或修改NumVisits。然后调用Unlock方法,以确保其它用户可以访问Application对象。

VBScript
<% 
Application.Lock 
Application("NumVisits") = Application("NumVisits") + 1 
Application.Unlock 
%>  

This application page has been visited  
<%= Application("NumVisits") %> times!

必备条件

Client: Requires Windows XP Professional, Windows 2000 Professional, or Windows NT Workstation 4.0.

Server: Requires Windows Server 2003, Windows 2000 Server, or Windows NT Server 4.0.

Product: IIS

如果你喜欢这篇文章,敬请给站长打赏↑

除特别注明外,本站所有文章均为本站站长原译,转载请注明出处。