1、1Active Server Page基礎教材一、 關於 ASP .2二、 ASP 的新功能 .4三、 創建 ASP 頁 5四、 使用腳本語言 8五、 使用變數和常量 10六、 使用集合 13七、 ASP 內建物件 .19八、 向瀏覽器發送內容 23九、 包含文件 28十、 訪問資料庫 32十一、 調試 ASP 腳本 .40十二、 維護 ASP 應用程式的安全 .47雨菲亭整理http: http:ylyl.htm 2一、 關於 Active Server PageMicrosoft? Active Server Pages(ASP )是伺服器端腳本編寫 環境,使用它可以創建和運行動態、交互的
2、 Web 伺服器應用程式。使用 ASP 可以組合 HTML 頁、腳本命令和 ActiveX 元件以創建交互的 Web 頁和基於 Web 的功能強大的應用程式。ASP 應用程式很容易開發和修改。HTML 編寫人員如果您是位 HTML 編寫人員,您將發現 ASP 腳本提供了創建交互頁的簡便方法。如果您曾想從 HTML 表格中收集資料,或用顧客的姓名個人化 HTML 文件,或根據瀏覽器的不同使用不同的特性,您會發現 ASP 提供了一個出色的解決方案。以前,要想從 HTML 表格中收集資料,就不得不學習一門編程語言來創建一個 CGI 應用程式。現在,您只要將一些簡單的指令嵌入到您的 HTML 文件中,
3、就可以從表格中收集資料並進行分析。您再不必學習完整的編程語言或者單獨編譯程序來創建交互頁。隨著不斷掌握使用 ASP 和腳本語言的技巧,您可以創建更複雜的腳本。對於 ASP,您可以便捷地使用 ActiveX 元件來執行複雜的任務,比如連接資料庫以存儲和檢索資訊。對 ASP 腳本的逐步介紹,請參閱 ASP 教程。然後您可以再回到這些主題中瞭解關於編寫 ASP 腳本的詳細資訊。有經驗的腳本編寫人員如果您已經掌握一門腳本語言,如 VBScript、JavaScript 或 PERL,而且您已經瞭解使用 ASP 的方法。只要安裝了符合 ActiveX 腳本標準的相應腳本引擎,就可以在 ASP 頁中使用任
4、何一種腳本語言。ASP 帶有 Microsoft? Visual Basic? Scripting Edition (VBScript )和 Microsoft? JScript? 的腳本引擎,這樣您可以立即開始編輯腳本。PERL、REXX 和 Python 的 ActiveX 腳本引擎可以從第三方開發人員處獲得。Web 開發人員如果您已經掌握了一門編程語言,如 Visual Basic,您將發現 ASP 是快速創建 Web 應用程式的一個非常靈活的方法。通過向 HTML 中添加腳本命令,您能夠創建應用程式的 HTML 介面。通過創建自己的 ActiveX 元件,可以將應用程式中的商業邏輯封裝
5、到能夠從腳本、其他元件或從其他程式中調用的模組。使用 ASP 進行計算的 Web 可轉化爲有形的利益,它使 Web 供應商能夠提供交互的商業應用而不僅僅是發佈內容。例如,旅行社能夠比公佈航空時刻表做得更多;用 ASP 腳本可以讓客戶察看現有的航班、比較費用並預定座位。包含在 Windows NT Option pack 中的 Microsoft Transaction Server(MTS)可以降低在伺服器上構造程式的複雜性和費用。MTS 可以解決開發那些保密性強的、可分級的以及可3靠的 Web 應用程式的複雜性問題。Active Server Pages 模型瀏覽器從 Web 伺服器上請求
6、.asp 文件時,ASP 腳本開始運行。然後 Web 伺服器調用 ASP,ASP 全面讀取請求的文件,執行所有腳本命令,並將 Web 頁傳送給瀏覽器。由於腳本在伺服器上而不是在用戶端運行,傳送到瀏覽器上的 Web 頁是在 Web 伺服器上生成的。所以不必擔心瀏覽器能否處理腳本:Web 伺服器已經完成了所有腳本的處理,並將標準的 HTML 傳輸到瀏覽器。由於只有腳本的結果返回到瀏覽器,所以伺服器端腳本不易複製。用戶看不到創建他們正在瀏覽的頁的腳本命令。4二、 Active Server Page 的新功能Active Server Pages 在功能方面有所增強,更易於開發應用程式。Micros
7、oft 腳本調試程式。 您可以使用腳本調試程式調試 .asp 文件。請參閱 調試 ASP 腳本。 事務性腳本。 ASP 頁和頁中使用的物件可以運行於事務環境之下。在頁上的全部工作只有兩種結果:提交或終止。事務可以保護應用程式免於因失敗而導致資料丟失。請參閱 創建事務性腳本。 管理工具。 許多應用程式設置可在 Internet 服務管理器上進行,這是 Internet Information Server 和 Personal Web Server(在 Windows NT Workstation 上)的管理工具。請參閱 配置 ASP 應用程式。 隔離 ASP 應用程式。 您可以隔離 ASP 應
8、用程式以便它們能在 Web 伺服器上獨立的記憶體空間內運行。萬一某個應用程式失敗時,可以保護其他應用程式和 Web 伺服器。它也使您可以在不停止 Web 伺服器的情況下,停止一個應用程式或從記憶體中卸載其元件。請參閱 隔離應用程式. 文件上載。 瀏覽器可以通過 Posting Acceptor 應用程式將文件上載到 Web 伺服器。可以編寫 ASP 腳本來發送帶有從 Posting Acceptor 傳來的資訊的 email,如每一個上載文件的位置和名稱。請參閱 Posting Accepter 文檔(在 Microsoft Site Server Express 的目錄表中) 。新的 ASP
9、 元件。 ASP 提供了新的基礎元件。有關概述請參閱 ActiveX 元件。 應用程式根目錄的改變。 ASP 應用程式的根目錄在您的 Web 站點上可以是物理目錄。以前,根目錄必須映射爲虛擬目錄。現在可以用 Internet 服務管理器指示 ASP 應用程式的根目錄。請參閱 創建應用程式。必須將 .asp 文件置於應用程式樹中,Web 伺服器才能檢測文件的改變並且自動重裝它們。 支援 Internet Explorer 4.0 通道和 Web 預測。 當 ASP 要發送包含通道定義命令的文件時,它會自動告訴 Internet Explorer 4.0。使用 ASP 很容易就能生成通道定義 (.
10、cdf) 文件。支援 HTTP 1.1 協定。 Internet Information Server 和 Personal Web Server 支援 HTTP 1.1 協定。在回應支援 HTTP 1.1 的瀏覽器(例如 Internet Explorer 4.0)時,這一支援可使 ASP 利用新協定的高效率。例如,當向瀏覽器返回頁的時候,ASP 使用大塊轉換編碼以提高網路效率。 5三、 創建 Active Server Page 頁Active Server Pages(ASP)文件是以 .asp 爲副檔名的文字檔案,這個文字檔案可以包括下列部分的任意組合:文本 HTML 標記 ASP 腳
11、本命令 創建 .asp 文件非常容易。如果要在 HTML 文件中添加腳本,只需將該文件的副檔名 .htm 或 .html 替換爲 .asp 就可以了。要使 .asp 文件可用於 Web 用戶,請將這個新文件保存在 Web 站點上的目錄中(請確定啓用了該目錄的腳本和執行許可權) 。使用瀏覽器查看該文件時,可以看到 ASP 處理並返回了 HTML 頁。現在可以在 .asp 文件中添加腳本命令了。注意 因爲 .asp 文件需要額外的處理,請不要將所有的 HTML 頁都轉換爲 ASP 頁。應該只將包含腳本命令的文件轉換爲 .asp 文件。.asp 和 .htm 文件可以放置在相同的目錄中。使用任何的文
12、本編輯器都可以創建 .asp 文件。使用那些帶有 ASP 增強支援的編輯器將更能提高效率,如 Microsoft? Visual InterDev? 。如果您從未使用過 HTML,請考慮先使用 Microsoft FrontPage 。使用 FrontPage 創建文檔和格式化文本就象使用文字處理工具一樣簡單。接下來還可以使用 Insert Script 命令在 FrontPage 創建的 HTML 頁中加入簡單的 ASP 命令。加入 Script 命令腳本是一系列的命令和指令。與 HTML 標簽不同,script 命令指示 Web 伺服器執行操作,而 HTML 標簽只是簡單地格式化文本或讀取
13、圖形、視頻及音頻文件。Script 命令可以在變數中存儲用戶名,在返回到瀏覽器的頁中顯示用戶名或將用戶名存儲在資料庫中。腳本命令通過定界符與文本區別開來。定界符是字元或一串字元,它標誌單元開始或結束。HTML 使用定界符棗小於號( )括入 HTML 標簽。ASP 使用定界符 括入腳本命令。您可以在定界符中括入任何命令,只要這些命令對正在使用的腳本語言有效。下面的例子展示了包含腳本命令的簡單的 HTML 頁:This page was last refreshed on .VBScript 函數 Now 返回當前的日期和時間。Web 伺服器處理該頁時,會使用當前的日期和時間替換 並且將該頁返回到
14、瀏覽器:This page was last refreshed on 8/1/97 2:20:00 PM.定界符括入的命令被稱爲主腳本命令。這些命令被主腳本語言處理。在腳本定界符中使用的任何命令都必須對主腳本語言有效。默認情況下,主腳本語言是 VBScript。要設置另一種語言。請參閱 使用腳本語言。如果您已經熟悉了用戶端腳本編寫(編寫在瀏覽器上運行的腳本) ,請注意不要用 HTML 元素括入運算式。在編寫伺服器端腳本時,只用 元素在主腳本語言6外的其他語言中定義過程。關於詳細資訊,請參閱 使用腳本語言。合成 HTML 和腳本命令在 ASP 定界符中可以包含任何在主腳本語言中合法的語句、運算
15、式、過程或操作符。在 VBScript 和其他腳本語言中,語句是語法完整的單元,該單元表達某項活動、聲明或定義。下面的條件語句 If.Then.Else 是一條常見的 VBScript 語句。= #12:00:00 AM# And Time 這條語句將值 “Good Morning!“ 或值 “Hello!“ 存儲在變數 greeting 中。 命令將當前的變數值發送到瀏覽器中。這樣,在(Web 伺服器所在時區的)正午 12 點前瀏覽該腳本的用戶將看到:Good Morning!在正午 12 點或以後瀏覽此腳本的用戶將看到:Hello!在語句的不同部分之間可以加入 HTML 文本。例如,下面的
16、腳本在 If.Then.Else 語句中加入了 HTML,産生了與上面腳本同樣的結果:= #12:00:00 AM# And Time Good Morning!Hello!如果條件爲真棗也就是說,如果時間爲午夜、午夜以後或者中午以前,那麽 Web 伺服器將跟隨條件(“Good Morning”)的 HTML 發送到瀏覽器;否則,將跟隨 Else 的 HTML(“Hello”)發送到瀏覽器。這種混合 HTML 和腳本命令的方式可以方便地將 If.Then.Else 語句變換爲幾行 HTML 文本。如果要在 Web 頁上顯示多處問候,前一個例子更爲有用。只需要設置一次變數,就可以重復顯示。最好從
17、腳本命令中將 HTML 文本返回到瀏覽器,而不用腳本命令散佈 HTML 文本。要將文本返回到瀏覽器,請使用 ASP 的內建物件 Response。下面的例子可以産生與前一個腳本同樣的結果:= #12:00:00 AM# And Time Response.Write 將跟隨的文本發送到瀏覽器。要動態構造返回瀏覽器的文本,請在語句中使用 Response.Write。例如,可能要構造包含一些變數值的字串。在 使用元件和物件 以及 向瀏覽器傳送內容 中瞭解到更多有關 Response 物件和一般物件的資訊。現在,先瞭解將腳本命令插入到 HTML 頁中的幾種方法。7在 ASP 定界符中可以包含用默認
18、主腳本語言編寫的過程。詳細資訊,請參閱 使用腳本語言。如果正在使用 JScript 命令,可以插入花括弧指示語句塊直接進入 ASP 命令,而不用考慮它是否夾雜著 HTML 標簽和文本。例如:This is the text version of a page.This is the multimedia version of a page.使用 ASP 指令ASP 提供了您使用的腳本語言以外的指令。這是一些輸出指令和處理指令。ASP 的輸出指令 顯示運算式的值。這個輸出指令等同於使用 Response.Write 顯示資訊。例如,輸出運算式 將文字 climbing(變數當前的值)傳送到瀏覽器
19、。ASP 處理指令 爲 ASP 提供處理 .asp 文件所需的資訊。例如,下面的指令將 VBScript 設爲該頁的主腳本語言:處理指令必須出現在 .asp 文件的第一行。不要將處理指令放在包含 #include 語句的文件中。必須在 at 標記()和關鍵字之間加入一個空格。處理指令有下列關鍵字:LANGUAGE 關鍵字設置頁的腳本語言;請參閱 使用腳本語言。 CODEPAGE 關鍵字設置頁的內碼表(字元編碼) ;請參閱 使用國際站點。 LCID 關鍵字設置頁的現場識別字;請參閱 使用國際站點。 TRANSACTION 關鍵字指定將在事務處理環境下運行的頁;請參閱 創建事務處理腳本。 ENAB
20、LESESSIONSTATE 關鍵字指定 ASP 頁是否使用會話狀態;請參閱 管理會話。 可以在單個指令中包含多個關鍵字;關鍵字/值對之間必須由空格分開。不要在等號(=)左右加入空格。下面的例子中設置了腳本語言和內碼表:在腳本中的空白字元如果您的主腳本語言是 VBScript 或者 JScript,ASP 從指令中刪除空白字元。使用其他腳本語言時,ASP 保留空白字元,這樣那些需要使用位置和縮進的語言,如 Python 就可以被正確解釋了。空白字元包括空格、跳位字元、回車和換行符。使用 VBScript 和 JScript 時,在打開定界符之後和關閉定界符之前使用空白字元更容易閱讀命令。下面的
21、命令都是合法的:ASP 將一個語句的關閉定界符與下一個語句的打開定界符之間的空白字元刪除。要保留兩個語句間的空白字元,比如在句子中顯示變數值的時候,請使用 HTML 不間斷空符( ) 。例如:My response is to say “.“ 四、 使用腳本語言腳本語言是介於 HTML 和 Java、C+ 和 Visual Basic 之類的編程語言之間的語言。HTML 通常用於格式化文本和鏈結網頁。編程語言通常用於向電腦發送一系列複雜指令。腳本語言也可用來向電腦發送指令,但它們的語法和規則沒有可編譯的編程語言那樣嚴格和複雜。腳本語言主要用於格式化文本和使用以編程語言編寫的已編譯好的元件。Ac
22、tive Server Pages 使 Web 開發商用多種腳本語言編寫完整的過程成爲可能。事實上,在單個 .asp 文件內部就可以使用多種腳本語言。另外,由於腳本是在伺服器端讀取和處理的,所以請求 .asp 文件的用戶端瀏覽器並不需要支援腳本。您可以使用任意一種其相應的腳本引擎已安裝在 Web 伺服器上的腳本語言。腳本引擎是處理用某種語言書寫的命令的程式。Active Server Pages 帶有兩個腳本引擎:Microsoft Visual Basic Scripting Edition (VBScript) 和 Microsoft JScript。您也可以安裝和使用其他的腳本語言引擎,
23、例如 REXX 和 Perl。如果您已經是 Visual Basic 程式師,就可以馬上使用 VBScript,它是 Visual Basic 的子集。如果您是 Java、C 或 C+ 程式師,您會發現 JScript 語法對您來說是熟悉的,雖然 JScript 與 Java 或 C 並沒有聯繫。如果您熟悉其他腳本語言,例如 REXX 或 Perl,您可獲取和安裝相應的腳本引擎,這樣就可以使用您熟悉的腳本語言了。Active Server Pages 是 ActiveX 腳本的宿主。要使用一種語言,必須安裝腳本引擎,該引擎必須遵循 ActiveX 腳本標準並作爲一個 COM (元件物件模型)物
24、件駐留在 Web 伺服器上。設置主腳本語言 ASP 主腳本語言 是用來處理在分界符 內部的命令的語言。默認時,主腳本語言是 VBScript。您可以將任何一種具有腳本引擎的腳本語言作爲主腳本語言。您可以逐頁設置主腳本語言,也可以在 ASP 應用程式中設置所有頁的主腳本語言。爲某頁設置語言要設置單個頁的主腳本語言,可將 指令添加到 .asp 文件的開頭。該指令的語法是:其中 ScriptingLanguage 就是您所設置的頁的主腳本語言。如果對某頁進行了設置,那麽該頁將忽略在應用程式中對所有頁的全局設置。請遵循使用 ASP 指令的指導。詳細資訊,請參閱 創建 ASP 頁。注意 要將不支援 Ob
25、ject.Method 語法的語言作爲主腳本語言使用,必須先創建 LanguageEngines 註冊表鍵。詳細資訊,請參閱 註冊表。爲應用程式設置語言在應用程式中,如要爲所有頁設置主腳本語言,可在 Internet 服務管理器的“App 選項”選項卡上設置“默認的 ASP 語言”屬性。詳細資訊,請參閱配置 ASP 應用程式。在伺服器上使用 VBScript 和 JScript在服務端通過 ASP 使用 VBScript 時,兩個 VBScript 特徵將失效。由於 Active Server Pages 腳本是在伺服器端執行的,表示用戶介面的元素的 VBScript 語句 InputBox
26、和 MsgBox 將不被支援。另外,在伺服器端的腳本中,請不要使用 VBScript 函數 9CreateObject 和 GetObject。而要使用 Server.CreateObject,這樣 ASP 就可以跟蹤物件實例了。用 CreateObject 或 GetObject 創建的物件不能訪問 ASP 內建物件,也不能參與事務處理。該規則的一個例外是如果您使用的是 Admin 物件和 Java monikers。詳細資訊,請參閱 IIS Admin 物件 和 創建 Java 類的實例。關於所有 VBScript 和 JScript 的操作符、函數、語句、物件、屬性及方法的列表及詳細說明
27、,請參閱 VBScript 語言參考 和 JScript 語言參考。包含注釋由於 ASP 腳本是在伺服器端處理的,所以即使用戶端的瀏覽器不支援腳本語言,也不必通過包含進 HTML 注釋標記來隱藏腳本,但用戶端的腳本則通常需要這樣處理。在內容送到瀏覽器之前,所有 ASP 命令都已被處理好了。您可用 HTML 注釋將注釋加進 HTML 頁。注釋將返回給瀏覽器,若用戶瀏覽 HTML 原始檔案,就可以看見。VBScript 注釋VBScript 支援撇號型注釋。與 HTML 注釋不同,當處理腳本時,它們將被刪除,而不是被送到瀏覽器。輸出運算式不能包括注釋。例如,下面的第一行將正常運行,而第二行則不能,
28、因爲它是以 JScript 注釋JScript 支援 / 注釋符。每一個注釋行中都必須使用該注釋符。/ This is a definition for the procedure PrintDate. function PrintDate() var xx = new Date() / This line sends the current date to the browser, / translated to a string.Response.Write(x.toString() 大小寫敏感性VBScript 不區分大小寫。例如,您可以用 Request 或 request 來引用 A
29、SP Request 物件。不區分大小寫的後果是您不能用大小寫來區分變數名。例如,您不能創建兩個名爲 Color 和 color 的單獨變數。JScript 區分大小寫。要在腳本中使用 JScript 關鍵字,就必須按參考頁中所示的大小寫來書寫。例如,用 date 來代替 Date 將導致錯誤。在 JScript 中,物件名必須大寫;方法名10和屬性名可大寫也可小寫。本文所示的 ASP 內建物件的情況將在 JScript 命令中正常工作。五、 使用變數和常量變數是電腦記憶體中已命名的存儲位置,其中包含了數位或字串等資料。變數包含的資訊被稱爲變數的值。變數使用用戶便於理解腳本操作的名稱爲用戶提供
30、了一種存儲、檢索和運算元據的途徑。聲明和命名變數命名和聲明變數應遵循腳本語言的規則及指導。即使在使用變數前不需要去聲明變數,也應養成在編程時聲明變數的良好習慣,因爲這樣有助於防止錯誤發生。聲明一個變數意味著告訴腳本引擎,有一個特定名稱的變數,這樣就可以在腳本中引用該變數。VBScriptVBScript 並不需要聲明變數,但在使用所有變數前聲明它們是一種好的腳本書寫習慣。要在 VBScript 中聲明變數,請用 Dim、 Public 或 Private 語句。例如:可以在需要顯式聲明變數的 .asp 文件中用 VBScript Option Explicit 語句。Option Explic
31、it 必須在任何一個 ASP 指令之後及任何一個 HTML 文本或腳本命令之前出現。該語句僅影響用 VBScript 書寫的 ASP 命令,而不會影響 JScript 命令。關於這些命令的詳細資訊,請參閱 VBScript 語言參考。JScriptMicrosoft JScript 僅當變數爲本地過程變數時才需聲明,但在使用所有變數前聲明它們是一種好的腳本書寫習慣。要聲明一個變數,請使用 var 語句。例如:有關 var 語句的詳細資訊,請參閱 JScript 語言參考。變數作用域變數的作用域即生命期,決定哪些腳本命令可訪問變數。在過程內部聲明的變數具有局部作用域。每執行一次過程,變數就被創建
32、然後消亡。而過程外部的任何命令都不能訪問它。在過程外部聲明的變數具有全局作用域,其值能被 ASP 頁上的任何腳本命令訪問和修改。聲明變數時,局部變數和總體變數可以有相同的名稱。而改變其中一個的值並不會改變另一個的值。如果沒有聲明變數,則可能不小心會改變一個總體變數的值。例如,以下腳本命令返回值 1,雖然有兩個名爲 Y 變數:11由於變數沒有顯式聲明,以下的腳本命令將返回 2。當程序呼叫將 Y 設置爲 2 時,腳本引擎認爲該過程是要修改總體變數:養成顯式聲明所有變數的編程習慣可以避免許多問題。尤其在當您用 #include 語句將文件包含進 ASP 主頁時,就顯得更爲重要。一個獨立文件中被包含的
33、腳本是被當作整個包含它的文件的一部分來處理的。用不同的名稱來命名主腳本和被包含腳本中用到的變數,這容易被遺忘,除非聲明變數。 爲變數賦予會話或應用程式作用域總體變數僅在單個 ASP 頁中可用,要使它在單個 ASP 頁之外可用,就必須爲變數賦予會話或應用程式作用域。會話作用域變數對一個用戶所請求的 ASP 應用程式中的所有頁都是可用的。應用程式作用域變數也如此。對單個用戶來說,會話變數是存儲資訊的最佳途徑,例如,首選項、用戶名或用戶標識。對於一個特殊應用程式的所有用戶,應用程式作用域是存儲資訊的最佳途徑,例如,應用程式特定的問候語或應用程式所需的初始值。ASP 提供兩個內建物件來讓您存儲變數:S
34、ession 物件和 Application 物件。您也可以創建具有會話或應用程式作用域的物件實例。詳細資訊,請參閱 設置物件作用域。會話作用域要爲變數賦予會話作用域,將該變數存儲到 Session 物件中即可,方法是爲該物件的已命名條目指派一個值。例如,以下命令將兩個新的變數存儲到 Session 物件中。要 Session 物件中檢索資訊,可以用輸出指令 (可在 Session 物件中存儲用戶首選項,然後就可以訪問這些首選項,從而決定將哪一頁返回給用戶。例如,您可以允許用戶在應用程式的第一頁指定純文本內容,然後將這一選擇應用到用戶在該應用程式中訪問的所有後續頁。This is the te
35、xt version of the page.This is the multimedia version of the page.應用程式作用域要爲變數賦予應用程式作用域,將該變數存儲到 Application 物件中即可,方法是爲該物件的已命名條目指派一個值。例如,以下命令將一個應用程式特定的問候語存儲到12Application 物件中:要從 Application 物件中檢索資訊,可以使用 ASP 輸出指令 (使用常量常量是用來代替一個數或字串的名稱。一些隨 ASP 提供的基本元件,例如 ActiveX Data Objects (ADO),定義了您在腳本中可以使用的常量。元件可在一個
36、元件類型庫中聲明常量,元件類型庫是一個包含 ActiveX 元件所支援的物件和類型的資訊的文件。一旦在 Global.asa 文件中聲明了一個類型庫,您就可以在該應用程式的任意頁中使用已定義的常量。可在 Global.asa 中用 標記爲應用程式聲明類型庫。例如,要聲明 ADO 類型庫,可用以下語句:這樣,您就可以在與 Global.asa 文件相同的應用程式的中使用 ADO 常量。在下面的示例中,adOpenKeyset 和 adLockOptimistic 是 ADO 常量:Create and Open Recordset ObjectSet RsCustomerList = Serve
37、r.CreateObject(“ADODB.Recordset“)RsCustomerList.ActiveConnection = OBJdbConnectionRsCustomerList.CursorType = adOpenKeysetRsCustomerList.LockType = adLockOptimistic有關 標記的參考資訊,請參閱 TypeLibrary 聲明。在以前版本的 ASP 中,一些元件在文件中提供常量定義,每個使用那些元件的 ASP 文件必須包含該文件。用 #include 指令來包含常量定義的用法仍被支援,但使用類型庫通常更方便並且能使腳本更易於升級。在以後
38、版本的 ASP 中,元件可能將不再提供常量定義文件。您可以定義自己的常量。在 VBScript 中,用 Const 語句,在 JScript 中,用 var 語句。如果在多個 ASP 頁中使用常量,可在獨立的文件中放置常量,然後將其包含進每一個使用該常量的 ASP 文件中去。13六、 使用集合大多數 ASP 內建物件支援集合。集合是存儲字串、數位、物件和其他值的地方。除了在存儲或取出專案時集合會自動擴展與搜索外,集合與陣列非常相近。與陣列不同的是,集合被修改後,專案的位置將會移動。可以通過集合中專案的名稱、索引或者通過在集合的所有專案中遍曆訪問專案。通過名稱和索引訪問專案通過使用專案名稱可以訪
39、問集合中的具體專案。例如,Contents 集合擁有在 Session 物件中保存的所有變數。同樣也擁有由 Server.CreateObject 創建的所有物件。假設在 Session 物件中存儲了下列用戶資訊:可以使用在集合中存儲專案時關聯的名稱訪問專案。例如,下面的運算式返回字串“Sam”:通過使用與專案關聯的索引或號碼也可以訪問專案。例如,下面的運算式檢索存儲在 Session 物件的第二個存儲槽中的資訊並且返回“Woo”:ASP 集合從 1 開始編號。當在集合中增加或刪除專案時,與專案關聯的索引將會改變。所以不能認爲專案的索引始終不變。正如將在下面的主題中說明的那樣,利用索引的訪問一
40、般用來遍曆集合,或訪問唯讀集合中的專案。通過使用速記的名稱可以訪問專案。ASP 以特定的順序搜索與物件關聯的集合。如果在物件的集合中特定名稱的專案只出現一次的話,可以消除該集合的名稱:訪問存儲在 Application 或 Session 物件中的專案時,消除集合名稱一般是安全的。但是,對於 Request 物件,最好指定集合名稱,因爲該集合很可能包含重復的名稱。遍曆集合在集合的所有專案中遍曆可以瞭解集合中存儲的專案或修改專案。遍曆集合時,必須提供集合名稱。例如,可以使用 VBScript 中的 For.Each 語句訪問存儲在 Session 物件中的專案:“Next%可以使用 VBScri
41、pt 中的 For.Next 語句遍曆集合。例如,要列出上例中存儲在 Session 中的三個專案,可以使用下列語句。“Next%因爲一般不知道存儲在集合中的專案個數,ASP 支援集合的 Count 屬性,這個屬性返回集合中的專案數。可以使用 Count 屬性指定計數器的終值。“Next%可以在腳本中使用 for 語句在集合中迴圈。在 JScript 的 for 語句中使用 Count 屬性時,爲了收到更大的效果,應該將 Count 值分配給本地變數並使用該變數設置計數器終值。這樣,腳本引擎就不需要每次迴圈都查尋 Count 的值。下面的例子展示了這個技巧:“)%Microsoft JScri
42、pt 3.0 引入了 Enumerator 物件。可以使用該物件遍曆 ASP 集合。atEnd 方法指出了集合中是否還存在專案。moveNext 方法移動到集合中的下一個專案。“);15mycoll.moveNext();%遍曆帶子關鍵字 (Subkeys) 的集合腳本在單一 cookie 中嵌入相關值以減少在瀏覽器和 Web 伺服器之間傳送的 cookie 數目。因此 Request 和 Response 物件的 Cookies 集合能夠在單一專案中擁有多個值。這些子專案或子關鍵字可以被單個訪問。只有 Request.Cookies 和 Response.Cookies 集合支援子關鍵字 (
43、Subkeys)。Request.Cookies 只支援讀操作;Response.Cookies 只支援寫操作。可以列舉 Request.Cookie 集合中所有的 cookie 以及 Cookie 中所有的子關鍵字 (Subkeys)。但是,如果在沒有子關鍵字 (Subkeys) 的 Cookie 上遍曆子關鍵字,將不會産生任何結果。通過使用 .HasKeys 語法首先檢查 cookie 是否含有子關鍵字 (Subkeys),就可以避免這種情況。下面的這個例子展示了這個技巧。“If Request.Cookies(Cookie).HasKeys ThenDisplay the subkeys
44、For Each Subkey in Request.Cookies(Cookie)Response.Write Subkey OBJECT 標記。以下示例創建一個 Ad Rotator 物件的會話作用域實例:一旦您在 Session 物件中存儲了物件,您就可以從應用程式的任何頁中訪問該物件。下面的語句使用上例中由 標記創建的物件實例:在 ASP 頁上,您也可以使用 Server.CreateObject 方法將物件存儲在 Session 內建物件中。以下示例在 Session 物件中存儲 Ad Rotator 物件的一個實例。要顯示廣告,您首先應該獲取存儲在 Session 物件中的 Ad
45、Rotator 物件的實例,然後才能調用方法來顯示物件:在用 標記聲明的物件被某個 .asp 文件中的腳本命令引用之前,ASP 並不創建其實例。Server.CreateObject 方法則立即創建該物件實例。因此,對會話作用域物件來說,使用 標記要比 Server.CreateObject 屬性更好。爲物件賦予應用程式作用域application-scope 物件是在應用程式啓動時就創建的物件的單個實例。該物件由所有用戶端請求共用。僅在極少數情況下,您才需要爲物件賦予應用程式作用域。一些實用程式物件,例如計數器等,可能需要應用程式作用域。但一般來說,您可用在下一節中建議的替代方案。另外,線程
46、模型會影響性能和物件安全環境(請參閱本主題的“高級資訊:性能問題” ) 。要爲物件賦予應用程式作用域並將其存儲在 ASP Application 內建物件中,既可以使用 Global.asa 文件中的 標記,也可以使用 ASP 頁上的 Server.CreateObject 方法創建應用程式作用域的物件實例。在 Global.asa 文件中,您可用擴展了 RUNAT 屬性(必須設置爲 Sever)和 SCOPE 屬性(必須設置爲 Session)的 ;OBJECT 標記。在 ASP 頁中,您可以使用 Server.CreateObject 將物件實例存儲在 Application 內建物件中。
47、關於使用 標記和 Server.CreateObject 的示例,請參閱上一節 “爲物件賦予會話作用域 ”。會話和應用程式作用域的替代方案僅當需要時,才能爲物件賦予會話或應用程式作用域。因爲在會話或應用程式結束運行之前,這些物件會一直保留。它們會佔用記憶體或資料庫連接等資源,這些資源可能會在其他方面更有用。另外,元件的線程模型會影響您從中所創建的物件的性能,尤其是那些具有會話或應用程式作用域的物件。在很多情況下,比創建應用程式或會話作用域物件更好的方法就是利用會話或應用程式作用域變數,將資訊傳遞給在網頁一級創建的物件。例如,不要爲 ADO Connection 物件賦予會話或應用程式作用域,因
48、爲它創建的連接會在相當長的一段時間一直保持打開而此時腳本已不再使用 ODBC 連接共用。但您可以將 ODBC 連接字串存儲在 Session 或 Application 內建物件中,並在網頁上從創建的 Connection 物件實例中獲取該字串。通過這種方式,您可以存儲在會話或應用程式名稱空間中頻繁使用的資訊,但只有在需要時才創建用該資訊的物件。關於作用域變數的詳細資訊,請參閱“使用變數和常量” 。18用戶自定義的 JScript 物件您可以通過定義一個創建和初始化新物件的屬性和方法的構造函數來創建自己的 JScript 物件。當腳本用 new 操作符來調用構造函數時,就會創建該物件的實例。A
49、SP 腳本支援用戶自定義的物件,當具有頁作用域時,後者正常運行。但如果爲用戶自定義的 JScript 物件賦予應用程式或會話作用域,將可能影響該物件的功能。特別是,若一個物件具有會話或應用程式作用域,則其他頁的腳本可以獲取該物件的屬性,但是卻不能調用其方法。高級資訊:性能問題元件的線程模型可能會影響 Web 站點的性能,一般來說,帶有 Both 標記的物件是推薦在所有的 ASP 腳本中使用的物件,尤其是在 Session 和 Application 物件中。不推薦使用單線程物件。 因爲您可能不會始終控制所用物件的線程模型,所以,以下的指導可幫助您獲得最佳性能:頁作用域物件。帶有 Both 或 Apartment 標記的物件將給予您最佳的性能。 應用程式作用域物件。一般來說,應避免在 Application 物件中放置物件。如果確需使用應用程式作用域物件,您會從結合了 FreeThreadedMarshaler 的帶有 Both 標記的物件中獲得最佳性能。您既可以用 標記也可以用 Server.CreateObject 方法在 Application 物件中存儲帶有 Single、Free 或 Both 標記的物件。您必須用單元線程物件來使用 標記。