Global.asax文件是一个可文件,用可以在文件中指定事件脚本,并声明具有会用程序作用域的象。文件的内容
户显示的,而是用来存事件信息和由用程序全局使用的象。文件的名称必 Global.asax 且必存放在用程序的
根目中。用程序只能有一个 Global.asax 文件。

Global.asax
文件只能包含如下内容:

1.
用程序事件

2.
事件

3.<OBJECT>
声明

TypeLibrary
声明
如果包含的脚本没有用 <SCRIPT> 标记封装,或定象没有会用程序作用域,器将返回错误。服器会忽略已
的但未被用程序或会事件使用的脚本以及文件中的 HTML 句。

可以用任何支持脚本的 Global.asax 文件中包含的脚本。如果多个事件使用同一脚本言,就可以将它们组织在一
<SCRIPT>
标记中。

当用保存 Global.asax 文件所做的更改,在重新编译 Global.asax 文件之前,服器会理当前用程序的所有
求。在此期,服器拒其他求并返回一个错误消息,明正在重启动应用程序,不能求。

当用当前的所有理完之后,服对每个会话调 Session_OnEnd 事件,除所有活,并
Application_OnEnd
事件关闭应用程序,然后编译 Global.asax 文件。接下来,用求将启动应用程序并建新的会,触
Application_OnStart Session_OnStart 事件。

但是,保存 Global.asax 文件中所包含的文件的更改并不能使服器重新编译 Global.asax识别包含文件的改
再保存一下 Global.asax 文件。

Global.asax 文件中声明的程只能从一个或多个与 Application_OnStartApplication_OnEndSession_OnStart
Session_OnEnd
事件相的脚本中用。在基于 ASP 用程序中的 ASP 中,它是不可用的。

要在用程序之共享程,可在独的文件中声明程,然后使用服器端的包含 (SSI) 句将文件包含在该过
ASP 中。通常,包含文件展名应为 .inc


基于 ASP 用程序由在其根目及其子目中所有文件成。用程序在用首次打开应用程序中的某一 Web 页时,在服
关闭时终止。用程序有两个事件,即 Application_OnStart 事件和 Application_OnEnd 事件。

可以在 Global.asax 文件中为这些事件指定脚本。当用程序启动时,服器在 Global.asax 文件中找并
Application_OnStart
事件脚本。当用程序,服 Application_OnEnd 事件脚本。


1.Application_OnStart
Application_OnStart
事件在首次建新的会(即 Session_OnStart 事件)之前生。只有 Application Server 内建
象是可用的。在 Application_OnStart 事件脚本中引用 SessionRequest Response 象将错误


<SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server> Sub Application_OnStart. . . End Sub

</SCRIPT>

参数
ScriptLanguage
指定用于写事件脚本的脚本言。它可以是任何支持脚本写的言,例如 VB Script JScript。如果多个事件使用同一
脚本言,就可以将它们组织在一个 <SCRIPT> 标记下。

2.Application_OnEnd
Application_OnEnd
事件在用程序退出 Session_OnEnd 事件之后生,只有 Application Server 内建象可用。


<SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server> Sub Application_OnEnd. . . End Sub

</SCRIPT>

参数
ScriptLanguage
指定用于写事件脚本的脚本言。可以是任何一支持脚本的言,例如 VBScript JScript。如果有多个事件使用同
脚本言,就可以将它们组织在一 <SCRIPT> 标记下。

不能在 Application_OnEnd 脚本中 MapPath 方法。




当没有会的用在打开应用程序中的 Web 页时Web 器会自动创建会。当超或服 Abandon 方法,服


有两个事件,即 Session_OnStart 事件和 Session_OnEnd 事件。

可以在全局文件 Global.asax 为这两个事件指定脚本。当会话开,服器在 Global.asax 文件中找并
Session_OnStart
事件脚本。脚本将在理用户请求的 Web 之前理。在会话结,服器将 Session_OnEnd 事件
脚本。

1.Session_OnStart
Session_OnStart
事件在服建新会话时发生。服器在求的之前先脚本。Session_OnStart 事件是置会
量的最佳机,因访问任何之前都会先置它。所有内建 (ApplicationObjectContextRequest
Response
Server Session) 都可以在 Session_OnStart 事件脚本中使用和引用。


<SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server> Sub Session_OnStart. . .End Sub

</SCRIPT>

参数
ScriptLanguage
指定用于写事件脚本的脚本言。可以是任何一支持脚本的言,例如 VBScript JScript。如果有多个事件使用同
脚本言,就可以将它们组织在一 <SCRIPT> 标记下。
示例
尽管在 Session_OnStart 事件包含 Redirect End 方法用的情况下 Session 象仍会保持,然而服器将停止
Global.asax
文件并触 Session_OnStart 事件的文件中的脚本。

一个例子,了确保用在打某个特定的 Web 页时一个会,就可以在 Session_OnStart 事件中 Redirect
方法。当用户进用程序,服器将户创建一个会 Session_OnStart 事件脚本。您可以将脚本包含在事件中
以便检查是不是启动页,如果不是,就指示用户调 Response.Redirect 方法启。其演示如下例所示。

<SCRIPT RUNAT=Server Language=VBScript>
Sub Session_OnStart
    ' Make sure that new users start on the correct
    ' page of the ASP application.

   
' Replace the value given to startPage below
    ' with the virtual path to your application's
    ' start page.

    startPage = "/MyApp/StartHere.asp"
    currentPage = Request.ServerVariables("SCRIPT_NAME")

    ' Do a case-insensitive compare, and if they
    ' don't match, send the user to the start page.
   
if strcomp(currentPage,startPage,1) then        Response.Redirect(startPage)    end ifEnd Sub</SCRIPT>
上述示例只能在支持 cookie 浏览器中运行。因不支持 cookie 浏览器不能返回 SessionID cookie,所以,当用户请
Web 页时,服器都会建一个新会这样求,服器都将 Session_OnStart 脚本并将用重定向到启
动页中。如果您要使用下面的脚本,建您在启动页上放一个通知,告户该站点要求支持 cookie 浏览器。


注意,在 Redirect 方法之后的任何 Session_OnStart 事件脚本都不会行。因此,应该在您的事件脚本的最后再
Redirect
方法。其演示如下例所示。

<SCRIPT LANGUAGE=VBScript RUNAT=Server>
  Sub Session_OnStart
      ' Session initialization script 
      Response.Redirect "http:/server/app/StartHere.asp"
  End sub
</SCRIPT>
在上面的例子中,Redirect 方法在行会初始化脚本期间隐藏所有的文字。

2.Session_OnEnd
Session_OnEnd
事件在会被放弃或超时发生。在服器内建象中,只有 ApplicationServer Session 象可用。


<SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server> Sub Session_OnEnd. . . End Sub

</SCRIPT>

参数
ScriptLanguage
指定用于写事件脚本的脚本言。可以是任一支持脚本写的言,例如 VBScript JScript。如果有多个事件使用同
脚本言,可以将其组织在一 <SCRIPT> 标记下。

Session_OnEnd 脚本中不能 MapPath 方法。




<OBJECT>
声明
可以在 global.asax 文件中通使用展的 <OBJECT> 标记创有会用程序作用域的象。该标记是自包含的,且
在任何 <SCRIPT> 标记之外。

Global.asax 文件中声明的象在服该对象之前是不会建的。这样就只会建必需的象,从而节约源。

对带用程序作用域参数建的象不 OnStartPage OnEndPage 方法。


<OBJECT RUNAT=Server SCOPE=Scope ID=Identifier {PROGID="progID"¦CLASSID="ClassID"}>. . .

</OBJECT>

参数
Scope
指定象的作用域。在 Global.asax 文件中,Scope 将被 Session Application

Identifier
指定例的名称。

ProgID
类标识标识。无 ProgID ClassID 都必 <OBJECT> 中指定。ProgID 的格式 [Vendor.]Component
[.Version]


ClassID
指定 COM 类对象的唯一标识 ProgID ClassID 都必 <OBJECT> 中指定。
示例
下面的第一个示例使用 ProgID 参数建一个象,其会作用域名 MyConnection。第二个示例使用 ClassID 参数。

<OBJECT RUNAT=Server SCOPE=Session ID=MyConnection PROGID="ADODB.Connection">
REM Object Script
</OBJECT>

<OBJECT RUNAT=Server SCOPE=Session ID=MyConnection CLASSID="Clsid:8AD3067A-B3FC-11CF-A560-00A0C9081C21">
REM Object Script
</OBJECT>


Global.asax 文件中声明的象可被用程序中的任何脚本使用。例如,在声明了下列象的情况下。

---GLOBAL.ASAX---
<OBJECT RUNAT=Server SCOPE=Session ID=MyAd PROGID="MSWC.AdRotator">
</OBJECT>

可以从用程序中的任何一引用 MyAd 象:

---SOME.ASP---
<%= MyAd.GetAdvertisement("/ads/adrot.txt") %> 



TypeLibrary
声明

ActiveX
件常常要描述该组件支持的常量。是一个文件,其中包含有 ActiveX 件所支持的象和型的信
息。如果用 Web 用程序依于已在中声明了型的 ActiveX 象,就可以在 Global.asax 文件中声明其型。
做以后,就可以在用程序范内从任何脚本引用已在中声明了的数据型。

ASP 中使用常量的详细信息,使用量和常量


<!--METADATA TYPE="TypeLib"
FILE="file"
UUID="typelibraryuuid"
VERSION="majorversionnumber.minorversionnumber"
LCID="localeid"
-->
参数
file
绝对路径。如果提供了参数和 typelibraryuuid 参数, file 将用于标识类file 参数和
typelibraryuuid
参数都是必选项

typelibraryuuid
库统一的唯一标识file 参数和 typelibraryuuid 参数都是必选项

majorversionnumber
用于选择版本。如果找不到所需的版本,将返回错误参数是可选项

minorversionnumber
用于选择版本。如果找不到所需的版本,将返回错误参数是可选项

localeid
现场标识,用于。如果找不到所需的现场,将返回错误参数是可选项
错误信息
器可返回下列错误消息。

错误
ASP 0222
指定的无效。METADATA 标记包含无效的指定。
ASP 0223
找不到METADATA 包含的指定与注册表不符。
ASP 0224
无法加ASP 无法加 METADATA 标记中指定的
ASP 0225
不能重叠。ASP 无法从在 METADATA 标记中指定的 Type Library Wrapper 象。



最好将 METADATA 标记写在 Global.asax 文件的始位置。但是,无是内部和外部 SCRIPT 标记,都可以出 Global.asax
文件中的任何位置。

的名称加在常量的前面,可以避免常量的不明确引用。例如,ADODB.adErrItemNotFound 会比
adErrItemNotFound
更明确。

如果使用 Microsoft Visual InterDev global.asax 文件, METADATA 标记将包含可 STARTSPAN ENDSPAN
字。而 IIS 会忽略两个关键字。

示例
下面示例中的 MyComponent 是用 Visual Basic 5.0 写的。MyComponent 使用下列句定常量 MyError

Public Const MyError = "You are not using MyComponent correctly."

包含在 mycomponent.lib 中,文件安装在下面的目中。

C:"MyComponent

下面的 METADATA 标记包含在 MyApp 用程序的 global.asax 文件中。示例使用可 STARTSPAN ENDSPAN 标记。而
IIS
不需要两个标记

<!--METADATA TYPE="TypeLib"
FILE="MyComponent.lib"
-->

在,MyApp 用程序中的任何 ASP 都包含如下脚本:

<%
    Dim MyVar
    Set MyVar = Server.CreateObject("MyComponent.MyClass")
    Currentreturn = MyVar.MyMethod
    If Currentreturn = False
      Response.Write(MyError)
    End If
%>