ASP Global.asa 文件


Global.asa 文件

Global.asa 文件是一个可选文件,它可以包含可由 ASP 应用程序中的每个页面访问的对象、变量和方法的声明。

所有有效的浏览器脚本(JavaScript、VBScript、JScript、PerlScript 等)都可以在 Global.asa 中使用。

Global.asa 文件只能包含以下内容:

  • 应用事件
  • 会议活动
  • <对象> 声明
  • 类型库声明
  • #include 指令

笔记:Global.asa 文件必须存放在ASP 应用程序的根目录下,每个应用程序只能有一个Global.asa 文件。


Global.asa 中的活动

在 Global.asa 中,您可以告诉应用程序和会话对象在应用程序/会话启动时做什么以及在应用程序/会话结束时做什么。其代码放置在事件处理程序中。 Global.asa 文件可以包含四种类型的事件:

应用程序_OnStart

会话_OnStart- 每当新用户在 ASP 应用程序中请求他或她的首页时,都会发生此事件。

会话结束时- 每次用户结束会话时都会发生此事件。用户在指定时间内(默认为 20 分钟)未请求页面后,用户会话结束。

应用程序_OnEnd- 此事件在最后一个用户结束会话后发生。通常,当 Web 服务器停止时会发生此事件。此过程用于在应用程序停止后清理设置,例如删除记录或将信息写入文本文件。

Global.asa 文件可能如下所示:

<script language="vbscript" runat="server">

sub Application_OnStart
' some code
end sub

sub Application_OnEnd
' some code
end sub

sub Session_OnStart
' some code
end sub

sub Session_OnEnd
' some code
end sub

</script>

笔记:由于我们无法使用 ASP 脚本分隔符(<% 和 %>)在 Global.asa 文件中插入脚本,因此我们将子例程放入 HTML <script> 元素中。



<对象> 声明

可以使用 <object> 标签在 Global.asa 中创建具有会话或应用程序范围的对象。

笔记:<object> 标签应该位于 <script> 标签之外!

语法

<object runat="server" scope=" scope" id=" id" {progid=" progID"|classid=" classID"}>
....
</object>

Parameter Description
scope Sets the scope of the object (either Session or Application)
id Specifies a unique id for the object
ProgID An id associated with a class id. The format for ProgID is [Vendor.]Component[.Version]

Either ProgID or ClassID must be specified.

ClassID Specifies a unique id for a COM class object.

Either ProgID or ClassID must be specified.

示例

第一个示例使用 ProgID 参数创建一个名为 "MyAd" 的会话范围对象:

<object runat="server" scope="session" id="MyAd" progid="MSWC.AdRotator">
</object>

第二个示例使用 ClassID 参数创建名为 "MyConnection" 的应用程序范围对象:

<object runat="server" scope="application" id="MyConnection"
classid="Clsid:8AD3067A-B3FC-11CF-A560-00A0C9081C21">
</object>

Global.asa 文件中声明的对象可由应用程序中的任何脚本使用:

GLOBAL.ASA:

<object runat="server" scope="session" id="MyAd" progid="MSWC.AdRotator">
</object>

You could reference the object "MyAd" from any page in the ASP application:

SOME .ASP FILE:

<%=MyAd.GetAdvertisement("/banners/adrot.txt")%>

类型库声明

TypeLibrary 是与 COM 对象对应的 DLL 文件内容的容器。通过在 Global.asa 文件中包含对 TypeLibrary 的调用,可以访问 COM 对象的常量,并且 ASP 代码可以更好地报告错误。如果您的 Web 应用程序依赖于在类型库中声明了数据类型的 COM 对象,则可以在 Global.asa 中声明类型库。

语法

<!--METADATA TYPE="TypeLib"
file=" filename" uuid=" id" version=" number" lcid=" localeid"
-->

Parameter Description
file Specifies an absolute path to a type library.

Either the file parameter or the uuid parameter is required

uuid Specifies a unique identifier for the type library.

Either the file parameter or the uuid parameter is required

version Optional. Used for selecting version. If the requested version is not found, then the most recent version is used
lcid Optional. The locale identifier to be used for the type library

错误值

服务器可能返回以下错误消息之一:

Error Code Description
ASP 0222 Invalid type library specification
ASP 0223 Type library not found
ASP 0224 Type library cannot be loaded
ASP 0225 Type library cannot be wrapped

笔记:METADATA 标记可以出现在 Global.asa 文件中的任何位置(<script> 标记内部和外部)。但是,建议 METADATA 标记出现在 Global.asa 文件顶部附近。


限制

Global.asa 文件中可以包含的内容的限制:

  • 您无法显示 Global.asa 文件中写入的文本。该文件无法显示信息
  • 您只能在 Application_OnStart 和 Application_OnEnd 子例程中使用 Server 和 Application 对象。在Session_OnEnd 子例程中,您可以使用Server、Application 和Session 对象。在 Session_OnStart 子例程中,您可以使用任何内置对象

如何使用子程序

Global.asa 通常用于初始化变量。

下面的示例显示如何检测访问者首次到达网站的确切时间。时间存储在名为 "started" 的会话变量中,并且可以从应用程序中的任何 ASP 页访问 "started" 变量的值:

<script language="vbscript" runat="server">
sub Session_OnStart
Session("started")=now()
end sub
</script>

Global.asa 还可以用于控制页面访问。

下面的示例展示了如何将每个新访问者重定向到另一个页面,在本例中重定向到名为 "newpage.html" 的页面:

<script language="vbscript" runat="server">
sub Session_OnStart
Response.Redirect("newpage.html")
end sub
</script>

您可以在 Global.asa 文件中包含函数。

在下面的示例中,Application_OnStart 子例程在 Web 服务器启动时发生。然后Application_OnStart 子例程调用另一个名为"getcustomers" 的子例程。 "getcustomers" 子例程打开数据库并从 "customers" 表中检索记录集。记录集被分配给一个数组,可以从任何 ASP 页面访问它,而无需查询数据库:

<script language="vbscript" runat="server">

sub Application_OnStart
getcustomers
end sub

sub getcustomers
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open "c:/webdata/northwind.mdb"
set rs=conn.execute("select name from customers")
Application("customers")=rs.GetRows
rs.Close
conn.Close
end sub

</script>

Global.asa 示例

在此示例中,我们将创建一个 Global.asa 文件来计算当前访问者的数量。

  • 当服务器启动时,Application_OnStart 将应用程序变量 "visitors" 设置为 0
  • 每次有新访问者到达时,Session_OnStart 子例程都会向变量 "visitors" 添加 1
  • 每次触发 Session_OnEnd 子例程时,该子例程都会从 "visitors" 中减一

Global.asa 文件:

<script language="vbscript" runat="server">

Sub Application_OnStart
Application("visitors")=0
End Sub

Sub Session_OnStart
Application.Lock
Application("visitors")=Application("visitors")+1
Application.UnLock
End Sub

Sub Session_OnEnd
Application.Lock
Application("visitors")=Application("visitors")-1
Application.UnLock
End Sub

</script>

要在 ASP 文件中显示当前访问者的数量:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>There are <%response.write(Application("visitors"))%> online now!</p>
</body>
</html>