Application Object (IIS)
你可以使用Application对象,在给定应用程序的所有用户之间分享信息。一个基于ASP的应用程序被定义为一个虚拟目录和它的子目录中的所有的.asp文件。因为可以有多个用户共享Application对象,所以Lock方法和Unlock方法用来确保多个用户不能同时修改一个属性。
方法
Application对象定义了下面这些方法。
方法 | 描述 |
---|---|
Application.Contents.Remove | 从Application对象的Contents集合中删除一个项。 |
Application.Contents.RemoveAll | 从Application对象的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