Global.asa程式設計完全參考手冊

hrstudy發表於2020-04-07
作者:未知  
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 
%>

相關文章