【一、 關於 ASP】
Active Server Pages(ASP)是服務器端腳本編寫 環境,使用它可以創建和運
行動態、交互的 Web 服務器應用程序。使用 ASP 可以組合 HTML 頁、腳本命令
和 ActiveX 組件以創建交互的 Web 頁和基於 Web 的功能強大的應用程序。ASP
應用程序很容易開發和修改。
HTML 編寫人員 如果您是位 HTML 編寫人員,您將發現 ASP 腳本提供了創建交
互頁的簡便方法。如果您曾想從 HTML 表格中收集數據,或用顧客的姓名個人化
HTML 文件,或根據瀏覽器的不同使用不同的特性,您會發現 ASP 提供了一個出
色的解決方案。以前,要想從 HTML 表格中收集數據,就不得不學習一門編程語
言來創建一個 CGI 應用程序。現在,您只要將一些簡單的指令嵌入到您的 HTML
文件中,就可以從表格中收集數據並進行分析。您再不必學習完整的編程語言或
者單獨編譯程序來創建交互頁。
隨著不斷掌握使用 ASP 和腳本語言的技巧,您可以創建更複雜的腳本。對於
ASP,您可以便捷地使用 ActiveX 組件來執行複雜的任務,比如連接數據庫以存
儲和檢索信息。
對 ASP 腳本的逐步介紹,請參閱 ASP 教程。然後您可以再回到這些主題中了解
關於編寫 ASP 腳本的詳細信息。
有經驗的腳本編寫人員
如果您已經掌握一門腳本語言,如 VBScript、JavaScript 或 PERL,而且您已
經了解使用 ASP 的方法。只要安裝了符合 ActiveX 腳本標準的相應腳本引擎,
就可以在 ASP 頁中使用任何一種腳本語言。ASP 帶有 Microsoft? Visual Basic?
Scripting Edition (VBScript)和 Microsoft? JScript? 的腳本引擎,這樣
您可以立即開始編輯腳本。PERL、REXX 和 Python 的 ActiveX 腳本引擎可以從
第三方開發人員處獲得。 Web 開發人員 如果您已經掌握了一門編程語言,如
Visual Basic,您將發現 ASP 是快速創建 Web 應用程序的一個非常靈活的方
法。通過向 HTML 中添加腳本命令,您能夠創建應用程序的 HTML 接口。通過創
建自己的 ActiveX 組件,可以將應用程序中的商業邏輯封裝到能夠從腳本、其
他組件或從其他程序中調用的模塊。
使用 ASP 進行計算的 Web 可轉化為有形的利益,它使 Web 供應商能夠提供交
互的商業應用而不僅僅是發佈內容。例如,旅行社能夠比公佈航空時刻表做得更
多;用 ASP 腳本可以讓客戶察看現有的航班、比較費用並預定座位。
包含在 Windows NT Option pack 中的 Microsoft Transaction Server(MTS)
可以降低在服務器上構造程序的複雜性和費用。MTS 可以解決開發那些保密性強
的、可分級的以及可靠的 Web 應用程序的複雜性問題。
Active Server Pages模型
瀏覽器從 Web 服務器上請求 .asp 文件時,ASP 腳本開始運行。然後 Web 服務
器調用 ASP,ASP 全面讀取請求的文件,執行所有腳本命令,並將 Web 頁傳送
給瀏覽器。
由於腳本在服務器上而不是在客戶端運行,傳送到瀏覽器上的 Web 頁是在 Web
服務器上生成的。所以不必擔心瀏覽器能否處理腳本:Web 服務器已經完成了所
有腳本的處理,並將標準的 HTML 傳輸到瀏覽器。由於只有腳本的結果返回到瀏
覽器,所以服務器端腳本不易複製。用戶看不到創建他們正在瀏覽的頁的腳本命
令。
熾天使書城 【二、 ASP 的新功能】
Active Server Pages 在功能方面有所增強,更易於開發應用程序。
Microsoft 腳本調試程序。 您可以使用腳本調試程序調試 .asp 文件。
請參閱 調試 ASP 腳本
事務性腳本。 ASP 頁和頁中使用的對象可以運行於事務環境之下。在
頁上的全部工作只有兩種結果:提交或終止。事務可以保護應用程序免於因失敗
而導致數據丟失。請參閱創建事務性腳本。
管理工具。 許多應用程序設置可在 Internet 服務管理器上進行,這
是 Internet Information Server 和 Personal Web Server(在 Windows NT
Workstation 上)的管理工具。請參閱 配置 ASP 應用程序。
隔離 ASP 應用程序。 您可以隔離 ASP 應用程序以便它們能在 Web 服
務器上獨立的內存空間內運行。萬一某個應用程序失敗時,可以保護其他應用程
序和 Web 服務器。它也使您可以在不停止 Web 服務器的情況下,停止一個應用
程序或從內存中卸載其組件。請參閱隔離應用程序.
文件上載。 瀏覽器可以通過 Posting Acceptor 應用程序將文件上載
到 Web 服務器。可以編寫 ASP 腳本來發送帶有從 Posting Acceptor 傳來的信
息的 email,如每一個上載文件的位置和名稱。請參閱 Posting Accepter 文檔
(在 Microsoft Site Server Express 的目錄表中)。
新的 ASP 組件。 ASP 提供了新的基礎組件。有關概述請參閱 ActiveX
組件。
應用程序根目錄的改變。 ASP 應用程序的根目錄在您的 Web 站點上可
以是物理目錄。以前,根目錄必須映射為虛擬目錄。現在可以用 Internet 服務
管理器指示 ASP 應用程序的根目錄。請參閱創建應用程序。必須將 .asp 文件
置於應用程序樹中,Web 服務器才能檢測文件的改變並且自動重裝它們。
支持 Internet Explorer 4.0 通道和 Web 預測。 當 ASP 要發送包含
通道定義命令的文件時,它會自動告訴 Internet Explorer 4.0。使用 ASP 很
容易就能生成通道定義 (.cdf) 文件。
支持 HTTP 1.1 協議。 Internet Information Server 和 Personal Web
Server 支持 HTTP 1.1 協議。在響應支持 HTTP 1.1 的瀏覽器(例如 Internet
Explorer 4.0)時,這一支持可使 ASP 利用新協議的高效率。例如,當向瀏覽
器返回頁的時候,ASP 使用大塊轉換編碼以提高網絡效率。
熾天使書城 【三、 創建 ASP 頁】
Active Server Pages(ASP)文件是以 .asp 為擴展名的文本文件,這個文本文
件可以包括下列部分的任意組合:
文本
HTML 標記
ASP 腳本命令
創建 .asp 文件非常容易。如果要在 HTML 文件中添加腳本,只需將該文件的擴
展名 .htm 或 .html 替換為 .asp 就可以了。要使 .asp 文件可用於 Web 用
戶,請將這個新文件保存在 Web 站點上的目錄中(請確定啟用了該目錄的腳本
和執行權限)。使用瀏覽器查看該文件時,可以看到 ASP 處理並返回了 HTML 頁。
現在可以在 .asp 文件中添加腳本命令了。
注意 因為 .asp 文件需要額外的處理,請不要將所有的 HTML 頁都轉換為 ASP
頁。應該只將包含腳本命令的文件轉換為 .asp 文件。.asp 和 .htm 文件可以
放置在相同的目錄中。
使用任何的文本編輯器都可以創建 .asp 文件。使用那些帶有 ASP 增強支持的
編輯器將更能提高效率,如 Microsoft? Visual InterDev? 。如果您從未使用
過 HTML,請考慮先使用 Microsoft FrontPage 。使用 FrontPage 創建文檔和
格式化文本就象使用文字處理工具一樣簡單。接下來還可以使用 Insert Script
命令在 FrontPage 創建的 HTML 頁中加入簡單的 ASP 命令。
加入 Script 命令
腳本是一系列的命令和指令。與 HTML 標簽不同,script 命令指示 Web 服務器
執行操作,而 HTML 標簽只是簡單地格式化文本或讀取圖形、視頻及音頻文件。
Script 命令可以在變量中存儲用戶名,在返回到瀏覽器的頁中顯示用戶名或將
用戶名存儲在數據庫中。
腳本命令通過定界符與文本區別開來。定界符是字符或一串字符,它標志單元開
始或結束。HTML 使用定界符棗小於號(<)和大於號(>)括入 HTML 標簽。
ASP 使用定界符 <% 和 %> 括入腳本命令。您可以在定界符中括入任何命令,只
要這些命令對正在使用的腳本語言有效。下面的例子展示了包含腳本命令的簡單
的 HTML 頁:
This page was last refreshed on <%= Now %>.
VBScript 函數 Now 返回當前的日期和時間。Web 服務器處理該頁時,會使用當
前的日期和時間替換 <%= Now %> 並且將該頁返回到瀏覽器:
This page was last refreshed on 8/1/97 2:20:00 PM.
定界符括入的命令被稱為主腳本命令。這些命令被主腳本語言處理。在腳本定界
符中使用的任何命令都必須對主腳本語言有效。默認情況下,主腳本語言是
VBScript。要設置另一種語言。請參閱 使用腳本語言。
如果您已經熟悉了客戶端腳本編寫(編寫在瀏覽器上運行的腳本),請注意不要
用 HTML
大小寫敏感性
VBScript 不區分大小寫。例如,您可以用 Request 或 request 來引
用 ASP Request 對象。不區分大小寫的後果是您不能用大小寫來區分變量名。
例如,您不能創建兩個名為 Color 和 color 的單獨變量。
JScript 區分大小寫。要在腳本中使用 JScript 關鍵字,就必須按參
考頁中所示的大小寫來書寫。例如,用 date 來代替 Date 將導致錯誤。在
JScript 中,對像名必須大寫;方法名和屬性名可大寫也可小寫。本文所示的 ASP
內建對像的情況將在 JScript 命令中正常工作。
熾天使書城 【五、 使用變量和常量】
變量是計算機內存中已命名的存儲位置,其中包含了數字或字符串等數
據。變量包含的信息被稱為變量的值。變量使用用戶便於理解腳本操作的名稱為
用戶提供了一種存儲、檢索和操作數據的途徑。
聲明和命名變量
命名和聲明變量應遵循腳本語言的規則及指導。即使在使用變量前不需
要去聲明變量,也應養成在編程時聲明變量的良好習慣,因為這樣有助於防止錯
誤發生。聲明一個變量意味著告訴腳本引擎,有一個特定名稱的變量,這樣就可
以在腳本中引用該變量。
VBScript
VBScript 並不需要聲明變量,但在使用所有變量前聲明它們是一種好
的腳本書寫習慣。要在 VBScript 中聲明變量,請用 Dim、 Public 或 Private
語句。例如:
<% Dim UserName %>
可以在需要顯式聲明變量的 .asp 文件中用 VBScript Option
Explicit 語句。Option Explicit 必須在任何一個 ASP 指令之後及任何一個
HTML 文本或腳本命令之前出現。該語句僅影響用 VBScript 書寫的 ASP 命令,
而不會影響 JScript 命令。
關於這些命令的詳細信息,請參閱 VBScript 語言參考。
JScript
Microsoft JScript 僅當變量為本地過程變量時才需聲明,但在使用
所有變量前聲明它們是一種好的腳本書寫習慣。要聲明一個變量,請使用 var 語
句。例如:
<% var UserName; %>
有關 var 語句的詳細信息,請參閱 JScript 語言參考。
變量作用域
變量的作用域即生命期,決定哪些腳本命令可訪問變量。在過程內部聲
明的變量具有局部作用域。每執行一次過程,變量就被創建然後消亡。而過程外
部的任何命令都不能訪問它。在過程外部聲明的變量具有全局作用域,其值能被
ASP 頁上的任何腳本命令訪問和修改。
聲明變量時,局部變量和全局變量可以有相同的名稱。而改變其中一
個的值並不會改變另一個的值。如果沒有聲明變量,則可能不小心會改變一個全
局變量的值。例如,以下腳本命令返回值 1,雖然有兩個名為 Y 變量:
<%
Dim Y
Y = 1
Call SetLocalVariable
Response.Write Y
Sub SetLocalVariable
Dim Y
Y = 2
End Sub
%>
由於變量沒有顯式聲明,以下的腳本命令將返回 2。當過程調用將 Y 設
置為 2 時,腳本引擎認為該過程是要修改全局變量:
<%
Y = 1
Call SetLocalVariable
Response.Write Y
Sub SetLocalVariable
Y = 2
End Sub
%>
養成顯式聲明所有變量的編程習慣可以避免許多問題。尤其在當您用
#include 語句將文件包含進 ASP 主頁時,就顯得更為重要。一個獨立文件中被
包含的腳本是被當作整個包含它的文件的一部分來處理的。用不同的名稱來命名
主腳本和被包含腳本中用到的變量,這容易被遺忘,除非聲明變量。
為變量賦予會話或應用程序作用域
全局變量僅在單個 ASP 頁中可用,要使它在單個 ASP 頁之外可用,就
必須為變量賦予會話或應用程序作用域。會話作用域變量對一個用戶所請求的
ASP 應用程序中的所有頁都是可用的。應用程序作用域變量也如此。對單個用戶
來說,會話變量是存儲信息的最佳途徑,例如,首選項、用戶名或用戶標識。對
於一個特殊應用程序的所有用戶,應用程序作用域是存儲信息的最佳途徑,例如,
應用程序特定的問候語或應用程序所需的初始值。
ASP 提供兩個內建對像來讓您存儲變量:Session 對像和 Application 對象。
您也可以創建具有會話或應用程序作用域的對象實例。詳細信息,請參
閱設置對像作用域。
會話作用域
要為變量賦予會話作用域,將該變量存儲到 Session 對像中即可,方
法是為該對像的已命名條目指派一個值。例如,以下命令將兩個新的變量存儲到
Session 對像中。
<%
Session(\"FirstName\") = \"Jeff\"
Session(\"LastName\") = \"Smith\"
%>
要 Session 對像中檢索信息,可以用輸出指令 (<%=) 或
Response.Write 訪問已命名的條目。以下示例用輸出指令顯示
Session(\"FirstName\") 的當前值:
Welcome <%= Session(\"FirstName\") %>
可在 Session 對像中存儲用戶首選項,然後就可以訪問這些首選項,
從而決定將哪一頁返回給用戶。例如,您可以允許用戶在應用程序的第一頁指定
純文本內容,然後將這一選擇應用到用戶在該應用程序中訪問的所有後續頁。
<% If Session(\"ScreenResolution\") = \"Low\" Then %>
This is the text version of the page.
<% Else %>
This is the multimedia version of the page.
<% End If %>
應用程序作用域
要為變量賦予應用程序作用域,將該變量存儲到 Application 對像中
即可,方法是為該對像的已命名條目指派一個值。例如,以下命令將一個應用程
序特定的問候語存儲到Application 對像中:
<% Application(\"Greeting\") = \"Welcome to Exploration Air\" %>
要從 Application 對像中檢索信息,可以使用 ASP 輸出指令 (<%=)
或 Response.Write 從該應用程序的任意後續頁中訪問已命名條目。以下示例用
輸出指令顯示 Application(\"Greeting\") 的值:
<%= Application(\"Greeting\") %>
使用常量
常量是用來代替一個數或字符串的名稱。一些隨 ASP 提供的基本組件,
例如 ActiveX Data Objects (ADO),定義了您在腳本中可以使用的常量。組件
可在一個組件類型庫中聲明常量,組件類型庫是一個包含 ActiveX 組件所支持
的對象和類型的信息的文件。一旦在 Global.asa 文件中聲明了一個類型庫,您
就可以在該應用程序的任意頁中使用已定義的常量。
可在 Global.asa 中用 標記為應用程序聲明類型庫。例
如,要聲明 ADO 類型庫,可用以下語句:
這樣,您就可以在與 Global.asa 文件相同的應用程序的中使用 ADO 常量。在
下面的示例中,adOpenKeyset 和 adLockOptimistic 是 ADO 常量:
\'Create and Open Recordset Object
Set RsCustomerList = Server.CreateObject(\"ADODB.Recordset\")
RsCustomerList.ActiveConnection = OBJdbConnection
RsCustomerList.CursorType = adOpenKeyset
RsCustomerList.LockType = adLockOptimistic
有關 標記的參考信息,請參閱 TypeLibrary 聲明。
在以前版本的 ASP 中,一些組件在文件中提供常量定義,每個使用那
些組件的 ASP 文件必須包含該文件。用 #include 指令來包含常量定義的用法
仍被支持,但使用類型庫通常更方便並且能使腳本更易於升級。在以後版本的
ASP 中,組件可能將不再提供常量定義文件。
您可以定義自己的常量。在 VBScript 中,用 Const 語句,在 JScript
中,用 var 語句。如果在多個 ASP 頁中使用常量,可在獨立的文件中放置常量,
然後將其包含進每一個使用該常量的 ASP 文件中去。
熾天使書城 【六、 使用集合】
大多數 ASP 內建對像支持集合。集合是存儲字符串、數字、對像和其
他值的地方。除了在存儲或取出項目時集合會自動擴展與搜索外,集合與數組非
常相近。與數組不同的是,集合被修改後,項目的位置將會移動。可以通過集合
中項目的名稱、索引或者通過在集合的所有項目中遍歷訪問項目。
通過名稱和索引訪問項目
通過使用項目名稱可以訪問集合中的具體項目。例如,Contents 集合
擁有在 Session 對像中保存的所有變量。同樣也擁有由 Server.CreateObject
創建的所有對象。假設在 Session 對像中存儲了下列用戶信息:
<%
Session.Contents(\"FirstName\") = \"Sam\"
Session.Contents(\"LastName\") = \"Woo\"
Session.Contents(\"Age\") = 29
%>
可以使用在集合中存儲項目時關聯的名稱訪問項目。例如,下面的表達式返回字
符串「Sam\":
<%= Session.Contents(\"FirstName\") %>
通過使用與項目關聯的索引或號碼也可以訪問項目。例如,下面的表達
式檢索存儲在 Session 對像的第二個存儲槽中的信息並且返回\"Woo\":
<%= Session.Contents(2) %>
ASP 集合從 1 開始編號。當在集合中增加或刪除項目時,與項目關聯
的索引將會改變。所以不能認為項目的索引始終不變。正如將在下面的主題中說
明的那樣,利用索引的訪問一般用來遍歷集合,或訪問只讀集合中的項目。
通過使用速記的名稱可以訪問項目。ASP 以特定的順序搜索與對像關聯
的集合。如果在對像的集合中特定名稱的項目只出現一次的話,可以消除該集合
的名稱:
<%= Session(\"FirstName\") %>
訪問存儲在 Application 或 Session 對像中的項目時,消除集合名稱
一般是安全的。但是,對於 Request 對象,最好指定集合名稱,因為該集合很
可能包含重複的名稱。
遍歷集合
在集合的所有項目中遍歷可以了解集合中存儲的項目或修改項目。遍
歷集合時,必須提供集合名稱。例如,可以使用 VBScript 中的 For...Each 語
句訪問存儲在 Session 對像中的項目:
<%
\'Declare a counter variable.
Dim Item
\'For each item in the collection, display its value.
For Each Item in Session.Contents
Response.Write Session.Contents(Item) & \" \"
Next
%>
可以使用 VBScript 中的 For...Next 語句遍歷集合。例如,要列出上
例中存儲在 Session 中的三個項目,可以使用下列語句。
<%
\'Declare a counter variable.
Dim Item
\'Repeat the loop until the value of counter is equal to 3.
For Item = 1 to 3
Response.Write Session.Contents(Item) & \" \"
Next
%>
因為一般不知道存儲在集合中的項目個數,ASP 支持集合的 Count 屬
性,這個屬性返回集合中的項目數。可以使用 Count 屬性指定計數器的終值。
<%
\'Declare a counter variable.
Dim Item
\'Repeat this loop until the counter equals the number of items
\'in the collection.
For Item = 1 to Session.Contents.Count
Response.Write Session.Contents(Item) & \" \"
Next
%>
可以在腳本中使用 for 語句在集合中循環。在 JScript 的 for 語句
中使用 Count 屬性時,為了收到更大的效果,應該將 Count 值分配給本地變量
並使用該變量設置計數器終值。這樣,腳本引擎就不需要每次循環都查尋 Count
的值。下面的例子展示了這個技巧:
<%
var item, numitems;
numitems = Session.Contents.Count;
for (item = 1; item <= numitems; item++) {
Response.Write(Session.Contents(item) + \" \")
}
%>
Microsoft JScript 3.0 引入了 Enumerator 對象。可以使用該對像
遍歷 ASP 集合。atEnd 方法指出了集合中是否還存在項目。moveNext 方法移動
到集合中的下一個項目。
<%
// Create an Enumerator object
var mycoll = new Enumerator(Session.Contents);
//Iterate through the collection and display each item
while (!mycoll.atEnd()) {
var x = mycoll.item();
Response.Write(Session.Contents(x) + \" \");
mycoll.moveNext();
}
%>
遍歷帶子關鍵字 (Subkeys) 的集合
腳本在單一 cookie 中嵌入相關值以減少在瀏覽器和 Web 服務器之間
傳送的 cookie 數目。因此 Request 和 Response 對像的 Cookies 集合能夠在
單一項目中擁有多個值。這些子項目或子關鍵字可以被單個訪問。只有
Request.Cookies 和 Response.Cookies 集合支持子關鍵字 (Subkeys)。
Request.Cookies 只支持讀操作;Response.Cookies 只支持寫操作。
可以列舉 Request.Cookie 集合中所有的 cookie 以及 Cookie 中所
有的子關鍵字 (Subkeys)。但是,如果在沒有子關鍵字 (Subkeys) 的 Cookie 上
遍歷子關鍵字,將不會產生任何結果。通過使用 .HasKeys 語法首先檢查 cookie
是否含有子關鍵字 (Subkeys),就可以避免這種情況。下面的這個例子展示了這
個技巧。
<%
\'Declare counter variables
Dim Cookie, Subkey
\'Display the entire cookie collection.
For Each Cookie in Request.Cookies
Response.Write Cookie & \" \"
If Request.Cookies(Cookie).HasKeys Then
\'Display the subkeys
For Each Subkey in Request.Cookies(Cookie)
Response.Write Subkey & \"=\" & Request.Cookies(Cookie)(Subkey) & \" \"
Next
Else
Response.Write \"No subkeys in this cookie \"
End If
Next
%>
遍歷對像集合
Session 和 Application 集合可以保存數量變量或者對像實例。
Contents 集合擁有數量變量和通過調用 Server.CreateObject 生成的對象實
例。StaticObjects 集合擁有在 Global.asa 文件中使用 HTML