Global.asa編程完全參考手冊

作者:未知  
Global.asa 文件是一隹裳∥募沒Э梢栽詬夢募兄付ㄊ錄瘧荊⑸骶哂謝嶧昂陀τ貿絛蜃饔糜虻畝韻蟆8夢募哪諶?nbsp;
給用戶顯示的,而是用來存儲事件信息和由應用程序全局使用的對象。該文件的名稱必須是 Global.asa 且必須存放在應用程序的 
根目錄中。每個應用程序只能有一個 Global.asa 文件。 

Global.asa 文件只能包含如下內容: 

1.應用程序事件 

2.會話事件 

3.<OBJECT> 聲明 

TypeLibrary 聲明 
如果包含的腳本沒有用 <SCRIPT> 標記封裝,或定義的對象沒有會話或應用程序作用域,則服務器將返回錯誤。服務器會忽略已標 
記的但未被應用程序或會話事件使用的腳本以及文件中的 HTML 語句。 

可以用任何支持腳本的語言編寫 Global.asa 文件中包含的腳本。如果多個事件使用同一種腳本語言,就可以將它們組織在一組 
<SCRIPT> 標記中。 

當用戶保存對 Global.asa 文件所做的更改時,在重新編譯 Global.asa 文件之前,服務器會結束處理當前應用程序的所有請 
求。在此期間,服務器拒絕其他請求並返回一個錯誤消息,說明正在重啓動應用程序,不能處理請求。 

當用戶當前的所有請求處理完之後,服務器對每個會話調用 Session_OnEnd 事件,刪除所有活動會話,並調用 
Application_OnEnd 事件關閉應用程序,然後編譯 Global.asa 文件。接下來,用戶的請求將啓動應用程序並創建新的會話,觸 
發 Application_OnStart 和 Session_OnStart 事件。 

但是,保存 Global.asa 文件中所包含的文件的更改並不能使服務器重新編譯 Global.asa。爲了讓服務器識別包含文件的改動, 
必須再保存一下 Global.asa 文件。 

在 Global.asa 文件中聲明的過程只能從一個或多個與 Application_OnStart、Application_OnEnd、Session_OnStart 和 
Session_OnEnd 事件相關的腳本中調用。在基於 ASP 的應用程序中的 ASP 頁中,它們是不可用的。 

要在應用程序之間共享過程,可在單獨的文件中聲明這些過程,然後使用服務器端的包含 (SSI) 語句將該文件包含在調用該過程 
的 ASP 頁中。通常,包含文件的擴展名應爲 .inc。 


基於 ASP 的應用程序由在其根目錄及其子目錄中所有文件組成。應用程序在用戶首次打開應用程序中的某一 Web 頁時啓動,在服 
務器關閉時終止。應用程序有兩個事件,即 Application_OnStart 事件和 Application_OnEnd 事件。 

用戶可以在 Global.asa 文件中爲這些事件指定腳本。當應用程序啓動時,服務器在 Global.asa 文件中查找並處理 
Application_OnStart 事件腳本。當應用程序終止時,服務器處理 Application_OnEnd 事件腳本。 


1.Application_OnStart 
Application_OnStart 事件在首次創建新的會話(即 Session_OnStart 事件)之前發生。只有 Application 和 Server 內建 
對象是可用的。在 Application_OnStart 事件腳本中引用 Session、Request 或 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.asa 中爲這兩個事件指定腳本。當會話開始時,服務器在 Global.asa 文件中查找並處理 
Session_OnStart 事件腳本。該腳本將在處理用戶請求的 Web 頁之前處理。在會話結束時,服務器將處理 Session_OnEnd 事件 
腳本。 

1.Session_OnStart 
Session_OnStart 事件在服務器創建新會話時發生。服務器在執行請求的頁之前先處理該腳本。Session_OnStart 事件是設置會 
話期變量的最佳時機,因爲在訪問任何頁之前都會先設置它們。所有內建對象 (Application、ObjectContext、Request、 
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.asa 文件並觸發 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 事件在會話被放棄或超時發生。在服務器內建對象中,只有 Application、Server 和 Session 對象可用。 

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

</SCRIPT> 

參數 
ScriptLanguage 
指定用於編寫事件腳本的腳本編寫語言。可以是任一支持腳本編寫的語言,例如 VBScript 或 JScript。如果有多個事件使用同 
一種腳本編寫語言,則可以將其組織在一組 <SCRIPT> 標記下。 
註釋 
在 Session_OnEnd 腳本中不能調用 MapPath 方法。 




<OBJECT> 聲明 
用戶可以在 global.asa 文件中通過使用擴展的 <OBJECT> 標記創建帶有會話或應用程序作用域的對象。該標記是自包含的,且 
在任何 <SCRIPT> 標記之外。 

在 Global.asa 文件中聲明的對象在服務器處理調用該對象之前是不會創建的。這樣就只會創建必需的對象,從而節約了資源。 

服務器對帶有應用程序作用域參數創建的對象不調用 OnStartPage 和 OnEndPage 方法。 

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

</OBJECT> 

參數 
Scope 
指定對象的作用域。在 Global.asa 文件中,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.asa 文件中聲明的對象可被應用程序中的任何腳本使用。例如,在聲明瞭下列對象的情況下。 

---GLOBAL.ASA--- 
<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.asa 文件中聲明其類型。這 
樣做以後,就可以在應用程序範圍內從任何腳本引用已在類型庫中聲明瞭的數據類型。 

有關在 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.asa 文件的開始位置。但是,無論是內部和外部 SCRIPT 標記,都可以出現在 Global.asa 
文件中的任何位置。 

通過將類型庫的名稱加在該常量的前面,可以避免對常量的不明確引用。例如,ADODB.adErrItemNotFound 會比 
adErrItemNotFound 更明確。 

如果使用 Microsoft Visual InterDev 創建 global.asa 文件,則 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.asa 文件中。該示例使用可選的 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 
%>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章