Global.asa 文件是一個(gè)可選文件,用戶可以在該文件中指定事件腳本,并聲明具有會(huì)話和應(yīng)用程序作用域的對(duì)象。該文件的內(nèi)容
給用戶顯示的,而是用來(lái)存儲(chǔ)事件信息和由應(yīng)用程序全局使用的對(duì)象。該文件的名稱必須是 Global.asa 且必須存放在應(yīng)用程序的 根目錄中。每個(gè)應(yīng)用程序只能有一個(gè) Global.asa 文件。 Global.asa 文件只能包含如下內(nèi)容: 1.應(yīng)用程序事件 2.會(huì)話事件 3.<OBJECT> 聲明 TypeLibrary 聲明 如果包含的腳本沒(méi)有用 <SCRIPT> 標(biāo)記封裝,或定義的對(duì)象沒(méi)有會(huì)話或應(yīng)用程序作用域,則服務(wù)器將返回錯(cuò)誤。服務(wù)器會(huì)忽略已標(biāo) 記的但未被應(yīng)用程序或會(huì)話事件使用的腳本以及文件中的 HTML 語(yǔ)句。 可以用任何支持腳本的語(yǔ)言編寫 Global.asa 文件中包含的腳本。如果多個(gè)事件使用同一種腳本語(yǔ)言,就可以將它們組織在一組 <SCRIPT> 標(biāo)記中。 當(dāng)用戶保存對(duì) Global.asa 文件所做的更改時(shí),在重新編譯 Global.asa 文件之前,服務(wù)器會(huì)結(jié)束處理當(dāng)前應(yīng)用程序的所有請(qǐng) 求。在此期間,服務(wù)器拒絕其他請(qǐng)求并返回一個(gè)錯(cuò)誤消息,說(shuō)明正在重啟動(dòng)應(yīng)用程序,不能處理請(qǐng)求。 當(dāng)用戶當(dāng)前的所有請(qǐng)求處理完之后,服務(wù)器對(duì)每個(gè)會(huì)話調(diào)用 Session_OnEnd 事件,刪除所有活動(dòng)會(huì)話,并調(diào)用 Application_OnEnd 事件關(guān)閉應(yīng)用程序,然后編譯 Global.asa 文件。接下來(lái),用戶的請(qǐng)求將啟動(dòng)應(yīng)用程序并創(chuàng)建新的會(huì)話,觸 發(fā) Application_OnStart 和 Session_OnStart 事件。 但是,保存 Global.asa 文件中所包含的文件的更改并不能使服務(wù)器重新編譯 Global.asa。為了讓服務(wù)器識(shí)別包含文件的改動(dòng), 必須再保存一下 Global.asa 文件。 在 Global.asa 文件中聲明的過(guò)程只能從一個(gè)或多個(gè)與 Application_OnStart、Application_OnEnd、Session_OnStart 和 Session_OnEnd 事件相關(guān)的腳本中調(diào)用。在基于 ASP 的應(yīng)用程序中的 ASP 頁(yè)中,它們是不可用的。 要在應(yīng)用程序之間共享過(guò)程,可在單獨(dú)的文件中聲明這些過(guò)程,然后使用服務(wù)器端的包含 (SSI) 語(yǔ)句將該文件包含在調(diào)用該過(guò)程 的 ASP 頁(yè)中。通常,包含文件的擴(kuò)展名應(yīng)為 .inc。 基于 ASP 的應(yīng)用程序由在其根目錄及其子目錄中所有文件組成。應(yīng)用程序在用戶首次打開應(yīng)用程序中的某一 Web 頁(yè)時(shí)啟動(dòng),在服 務(wù)器關(guān)閉時(shí)終止。應(yīng)用程序有兩個(gè)事件,即 Application_OnStart 事件和 Application_OnEnd 事件。 用戶可以在 Global.asa 文件中為這些事件指定腳本。當(dāng)應(yīng)用程序啟動(dòng)時(shí),服務(wù)器在 Global.asa 文件中查找并處理 Application_OnStart 事件腳本。當(dāng)應(yīng)用程序終止時(shí),服務(wù)器處理 Application_OnEnd 事件腳本。 1.Application_OnStart Application_OnStart 事件在首次創(chuàng)建新的會(huì)話(即 Session_OnStart 事件)之前發(fā)生。只有 Application 和 Server 內(nèi)建 對(duì)象是可用的。在 Application_OnStart 事件腳本中引用 Session、Request 或 Response 對(duì)象將導(dǎo)致錯(cuò)誤。 語(yǔ)法 <SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server> Sub Application_OnStart. . . End Sub </SCRIPT> 參數(shù) ScriptLanguage 指定用于編寫事件腳本的腳本語(yǔ)言。它可以是任何支持腳本編寫的語(yǔ)言,例如 VB Script 或 JScript。如果多個(gè)事件使用同一種 腳本語(yǔ)言,就可以將它們組織在一個(gè) <SCRIPT> 標(biāo)記下。 2.Application_OnEnd Application_OnEnd 事件在應(yīng)用程序退出時(shí)于 Session_OnEnd 事件之后發(fā)生,只有 Application 和 Server 內(nèi)建對(duì)象可用。 語(yǔ)法 <SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server> Sub Application_OnEnd. . . End Sub </SCRIPT> 參數(shù) ScriptLanguage 指定用于編寫事件腳本的腳本編寫語(yǔ)言??梢允侨魏我环N支持腳本的語(yǔ)言,例如 VBScript 或 JScript。如果有多個(gè)事件使用同 一種腳本編寫語(yǔ)言,就可以將它們組織在一組 <SCRIPT> 標(biāo)記下。 注釋 不能在 Application_OnEnd 腳本中調(diào)用 MapPath 方法。 當(dāng)沒(méi)有會(huì)話的用戶在打開應(yīng)用程序中的 Web 頁(yè)時(shí),Web 服務(wù)器會(huì)自動(dòng)創(chuàng)建會(huì)話。當(dāng)超時(shí)或服務(wù)器調(diào)用 Abandon 方法時(shí),服務(wù)器 將終止該會(huì)話。 會(huì)話有兩個(gè)事件,即 Session_OnStart 事件和 Session_OnEnd 事件。 可以在全局文件 Global.asa 中為這兩個(gè)事件指定腳本。當(dāng)會(huì)話開始時(shí),服務(wù)器在 Global.asa 文件中查找并處理 Session_OnStart 事件腳本。該腳本將在處理用戶請(qǐng)求的 Web 頁(yè)之前處理。在會(huì)話結(jié)束時(shí),服務(wù)器將處理 Session_OnEnd 事件 腳本。 1.Session_OnStart Session_OnStart 事件在服務(wù)器創(chuàng)建新會(huì)話時(shí)發(fā)生。服務(wù)器在執(zhí)行請(qǐng)求的頁(yè)之前先處理該腳本。Session_OnStart 事件是設(shè)置會(huì) 話期變量的最佳時(shí)機(jī),因?yàn)樵谠L問(wèn)任何頁(yè)之前都會(huì)先設(shè)置它們。所有內(nèi)建對(duì)象 (Application、ObjectContext、Request、 Response、Server 和 Session) 都可以在 Session_OnStart 事件腳本中使用和引用。 語(yǔ)法 <SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server> Sub Session_OnStart. . .End Sub </SCRIPT> 參數(shù) ScriptLanguage 指定用于編寫事件腳本的腳本編寫語(yǔ)言??梢允侨魏我环N支持腳本的語(yǔ)言,例如 VBScript 或 JScript。如果有多個(gè)事件使用同 一種腳本編寫語(yǔ)言,就可以將它們組織在一組 <SCRIPT> 標(biāo)記下。 示例 盡管在 Session_OnStart 事件包含 Redirect 或 End 方法調(diào)用的情況下 Session 對(duì)象仍會(huì)保持,然而服務(wù)器將停止處理 Global.asa 文件并觸發(fā) Session_OnStart 事件的文件中的腳本。 舉一個(gè)例子,為了確保用戶在打開某個(gè)特定的 Web 頁(yè)時(shí)始終啟動(dòng)一個(gè)會(huì)話,就可以在 Session_OnStart 事件中調(diào)用 Redirect 方法。當(dāng)用戶進(jìn)入應(yīng)用程序時(shí),服務(wù)器將為用戶創(chuàng)建一個(gè)會(huì)話并處理 Session_OnStart 事件腳本。您可以將腳本包含在該事件中 以便檢查用戶打開的頁(yè)是不是啟動(dòng)頁(yè),如果不是,就指示用戶調(diào)用 Response.Redirect 方法啟動(dòng)網(wǎng)頁(yè)。其演示如下例所示。 <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 的瀏覽器中運(yùn)行。因?yàn)椴恢С?cookie 的瀏覽器不能返回 SessionID cookie,所以,每當(dāng)用戶請(qǐng) 求 Web 頁(yè)時(shí),服務(wù)器都會(huì)創(chuàng)建一個(gè)新會(huì)話。這樣,對(duì)于每個(gè)請(qǐng)求,服務(wù)器都將處理 Session_OnStart 腳本并將用戶重定向到啟 動(dòng)頁(yè)中。如果您要使用下面的腳本,建議您在啟動(dòng)頁(yè)上放一個(gè)通知,告訴用戶該站點(diǎn)要求支持 cookie 的瀏覽器。 注釋 請(qǐng)注意,在 Redirect 方法之后的任何 Session_OnStart 事件腳本都不會(huì)執(zhí)行。因此,應(yīng)該在您的事件腳本的最后再調(diào)用 Redirect 方法。其演示如下例所示。 <SCRIPT LANGUAGE=VBScript RUNAT=Server> Sub Session_OnStart ´ Session initialization script Response.Redirect "http:/server/app/StartHere.asp" End sub </SCRIPT> 在上面的例子中,Redirect 方法在執(zhí)行會(huì)話初始化腳本期間隱藏所有顯示給客戶的文字。 2.Session_OnEnd Session_OnEnd 事件在會(huì)話被放棄或超時(shí)發(fā)生。在服務(wù)器內(nèi)建對(duì)象中,只有 Application、Server 和 Session 對(duì)象可用。 語(yǔ)法 <SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server> Sub Session_OnEnd. . . End Sub </SCRIPT> 參數(shù) ScriptLanguage 指定用于編寫事件腳本的腳本編寫語(yǔ)言??梢允侨我恢С帜_本編寫的語(yǔ)言,例如 VBScript 或 JScript。如果有多個(gè)事件使用同 一種腳本編寫語(yǔ)言,則可以將其組織在一組 <SCRIPT> 標(biāo)記下。 注釋 在 Session_OnEnd 腳本中不能調(diào)用 MapPath 方法。 <OBJECT> 聲明 用戶可以在 global.asa 文件中通過(guò)使用擴(kuò)展的 <OBJECT> 標(biāo)記創(chuàng)建帶有會(huì)話或應(yīng)用程序作用域的對(duì)象。該標(biāo)記是自包含的,且 在任何 <SCRIPT> 標(biāo)記之外。 在 Global.asa 文件中聲明的對(duì)象在服務(wù)器處理調(diào)用該對(duì)象之前是不會(huì)創(chuàng)建的。這樣就只會(huì)創(chuàng)建必需的對(duì)象,從而節(jié)約了資源。 服務(wù)器對(duì)帶有應(yīng)用程序作用域參數(shù)創(chuàng)建的對(duì)象不調(diào)用 OnStartPage 和 OnEndPage 方法。 語(yǔ)法 <OBJECT RUNAT=Server SCOPE=Scope ID=Identifier {PROGID="progID"¦CLASSID="ClassID"}>. . . </OBJECT> 參數(shù) Scope 指定對(duì)象的作用域。在 Global.asa 文件中,Scope 將被設(shè)置為 Session 或 Application。 Identifier 指定對(duì)象實(shí)例的名稱。 ProgID 與類標(biāo)識(shí)相關(guān)的標(biāo)識(shí)。無(wú)論 ProgID 還是 ClassID 都必須在 <OBJECT> 中指定。ProgID 的格式為 [Vendor.]Component [.Version]。 ClassID 指定 COM 類對(duì)象的唯一標(biāo)識(shí)。 無(wú)論 ProgID 還是 ClassID 都必須在 <OBJECT> 中指定。 示例 下面的第一個(gè)示例使用 ProgID 參數(shù)創(chuàng)建一個(gè)對(duì)象,其會(huì)話作用域名為 MyConnection。第二個(gè)示例使用 ClassID 參數(shù)。 <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.asa 文件中聲明的對(duì)象可被應(yīng)用程序中的任何腳本使用。例如,在聲明了下列對(duì)象的情況下。 ---GLOBAL.ASA--- <OBJECT RUNAT=Server SCOPE=Session ID=MyAd PROGID="MSWC.AdRotator"> </OBJECT> 可以從應(yīng)用程序中的任何一頁(yè)引用 MyAd 對(duì)象: ---SOME.ASP--- <%= MyAd.GetAdvertisement("/ads/adrot.txt") %> TypeLibrary 聲明 ActiveX 組件常常要描述類型庫(kù)中該組件支持的常量。類型庫(kù)是一個(gè)文件,其中包含有關(guān) ActiveX 組件所支持的對(duì)象和類型的信 息。如果用戶的 Web 應(yīng)用程序依賴于已在類型庫(kù)中聲明了類型的 ActiveX 對(duì)象,就可以在 Global.asa 文件中聲明其類型。這 樣做 以后,就可以在應(yīng)用程序范圍內(nèi)從任何腳本引用已在類型庫(kù)中聲明了的數(shù)據(jù)類型。
有關(guān)在 ASP 中使用常量的詳細(xì)信息,請(qǐng)參閱“使用變量和常量”。 語(yǔ)法 <!--METADATA TYPE="TypeLib" FILE="file" UUID="typelibraryuuid" VERSION="majorversionnumber.minorversionnumber" LCID="localeid" --> 參數(shù) file 類型庫(kù)的絕對(duì)路徑。如果提供了該參數(shù)和 typelibraryuuid 參數(shù),則 file 將用于標(biāo)識(shí)類型庫(kù)。file 參數(shù)和 typelibraryuuid 參數(shù)都是必選項(xiàng)。 typelibraryuuid 類型庫(kù)統(tǒng)一的唯一標(biāo)識(shí)。file 參數(shù)和 typelibraryuuid 參數(shù)都是必選項(xiàng)。 majorversionnumber 用于選擇版本。如果找不到所需的版本,將返回錯(cuò)誤。該參數(shù)是可選項(xiàng)。 minorversionnumber 用于選擇版本。如果找不到所需的版本,將返回錯(cuò)誤。該參數(shù)是可選項(xiàng)。 localeid 現(xiàn)場(chǎng)標(biāo)識(shí),用于類型庫(kù)。如果找不到所需的現(xiàn)場(chǎng),將返回錯(cuò)誤。該參數(shù)是可選項(xiàng)。 錯(cuò)誤信息 服務(wù)器可返回下列錯(cuò)誤消息。 錯(cuò)誤 說(shuō)明 ASP 0222 指定的類型庫(kù)無(wú)效。METADATA 標(biāo)記包含無(wú)效的類型庫(kù)指定。 ASP 0223 找不到類型庫(kù)。METADATA 包含的類型庫(kù)指定與注冊(cè)表項(xiàng)不符。 ASP 0224 類型庫(kù)無(wú)法加載。ASP 無(wú)法加載 METADATA 標(biāo)記中指定的類型庫(kù)。 ASP 0225 類型庫(kù)不能重疊。ASP 無(wú)法從在 METADATA 標(biāo)記中指定的類型庫(kù)中創(chuàng)建 Type Library Wrapper 對(duì)象。 注釋 最好將 METADATA 標(biāo)記寫在 Global.asa 文件的開始位置。但是,無(wú)論是內(nèi)部和外部 SCRIPT 標(biāo)記,都可以出現(xiàn)在 Global.asa 文件中的任何位置。 通過(guò)將類型庫(kù)的名稱加在該常量的前面,可以避免對(duì)常量的不明確引用。例如,ADODB.adErrItemNotFound 會(huì)比 adErrItemNotFound 更明確。 如果使用 Microsoft Visual InterDev 創(chuàng)建 global.asa 文件,則 METADATA 標(biāo)記將包含可選的 STARTSPAN 和 ENDSPAN 關(guān) 鍵字。而 IIS 則會(huì)忽略這兩個(gè)關(guān)鍵字。 示例 下面示例中的 MyComponent 是用 Visual Basic 5.0 編寫的。MyComponent 使用下列語(yǔ)句定義常量 MyError。 Public Const MyError = "You are not using MyComponent correctly." 類型庫(kù)包含在 mycomponent.lib 中,該文件安裝在下面的目錄中。 C:\MyComponent 下面的 METADATA 標(biāo)記包含在 MyApp 應(yīng)用程序的 global.asa 文件中。該示例使用可選的 STARTSPAN 和 ENDSPAN 標(biāo)記。而 IIS 則不需要這兩個(gè)標(biāo)記。 <!--METADATA TYPE="TypeLib" FILE="MyComponent.lib" --> 現(xiàn)在,MyApp 應(yīng)用程序中的任何 ASP 都包含如下腳本: <% Dim MyVar Set MyVar = Server.CreateObject("MyComponent.MyClass") Currentreturn = MyVar.MyMethod If Currentreturn = False Response.Write(MyError) End If %> |
|