首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> ASP 程式設計 >> ASP 基礎

ASP Global.asa 應用程式事件與物件宣告完整指南

     編輯:ASP 基礎

ASP Global.asa:應用程式層級事件、物件宣告與類型庫


Global.asa 角色與限制

  • 選擇性檔案,放置於應用程式根目錄,每個應用程式僅能有一個
  • 可包含:Application/Session 事件、<object> 宣告、TypeLibrary 宣告、#include 指令
  • 腳本需置於 <script runat="server"> 標籤內 (不可使用 <% %>)
  • 無法直接輸出畫面內容

四大應用程式/Session 事件

事件觸發時機
Application_OnStart第一位使用者首次請求頁面、Web 服務重啟、Global.asa 修改後
Session_OnStart每位新使用者首次請求頁面 (緊接 Application_OnStart 後)
Session_OnEndSession 逾時 (預設 20 分鐘無活動) 或呼叫 Abandon
Application_OnEnd最後一位使用者 Session 結束、Web 服務停止

事件處理範本

<script language="vbscript" runat="server">
Sub Application_OnStart
  ' 初始化應用程式層級資料、快取資料庫查詢結果等
End Sub

Sub Application_OnEnd
  ' 清理資源、寫入日誌、關閉連線
End Sub

Sub Session_OnStart
  ' 初始化使用者 Session 資料、記錄登入時間
End Sub

Sub Session_OnEnd
  ' 清理使用者資源、更新線上人數
End Sub
</script>

<object> 宣告:建立 Application/Session 範圍物件

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

參數說明:

  • scope:session 或 application
  • id:物件唯一識別碼,供其他頁面直接引用
  • progid / classid:二擇一指定 COM 元件

宣告後,任何 ASP 頁面可直接使用 MyAd.GetAdvertisement(...)。


TypeLibrary 宣告:引用 COM 類型庫常數

<!--METADATA TYPE="TypeLib"
file="C:\Path\To\MyLib.tlb"
uuid="{GUID}"
version="1.0"
lcid="0"
-->

引用後可在 ASP 程式碼直接使用類型庫中定義的常數,提升可讀性與錯誤偵測。


物件使用限制

事件可用內建物件
Application_OnStart / Application_OnEndServer, Application
Session_OnEndServer, Application, Session
Session_OnStart所有內建物件 (Request, Response, Server, Application, Session 等)

實務應用範例

1. 記錄使用者進站時間

Sub Session_OnStart
  Session("started") = Now()
End Sub

2. 新訪客導向特定頁面

Sub Session_OnStart
  Response.Redirect("newpage.asp")
End Sub

3. 應用程式啟動時預載客戶資料至陣列

Sub Application_OnStart
  Call GetCustomers()
End Sub

Sub GetCustomers()
  Set conn = Server.CreateObject("ADODB.Connection")
  conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/webdata/northwind.mdb"
  Set rs = conn.Execute("SELECT name FROM customers")
  Application("customers") = rs.GetRows() ' 二維陣列,避免重複查詢
  rs.Close: conn.Close
End Sub

4. 線上人數計數器 (完整 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>

顯示線上人數 (任意頁面)

<p>目前線上: <%= Application("visitors") %> 人</p>

現代替代方案:ASP.NET 使用 Global.asax (Application_Start, Session_Start 等),ASP.NET Core 則在 Program.cs/Startup.cs 設定中介軟體與依賴注入,架構更模組化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved