通過前兩篇的學習,相信各位已經對 ASP 的動態網站設計有了一個基本的概念和整體的印象。從本篇開始作者將從指令碼語言的使用著手,由淺入深地帶領大家探索 ASP 動態網站設計的真正奧秘。
本文第二篇刊登後,很多朋友給我發了“妹兒”,希望能儘快看到本文的第三、第四、乃至第……篇,甚至有位朋友焦急地要我將 ASP 篇的全文發給他。看到有如此之多志同道合的朋友,令我精神大振。雖然 ASP 早在兩年前就已經推出了,但直到今年它才以其靈活便捷的開發過程、良好的 WEB 資料庫連接功能受到了國人的重視,然而由於目前國內尚缺乏關於 ASP 開發 WEB 應用程式的詳盡教材,因此使得國內廣大 WEB 開發人員們仍處在閉門啃 E 文的階段,也包括作者本人。也正因為如此,作者才蒙發了寫文章的念頭,在得到 Chinabyte 網路學院翁斌先生的大力支援後,各位才得以見到此文。
作者殷切希望能通過此文為廣大 WEB 開發人員和愛好者提供便利,使大家共同來參加 ASP 的學習和交流,為了顧全不同層次讀者的需求作者還是決定從最基本的指令碼語言的編製著手,隨後再一步一步地講解 ASP 內建對象、ActiveX 組件以及用 ASP 開發 WEB 應用程式的執行個體,相信通過一段時間持續的學習,不出幾個月各位都能夠得心應手地開發自己的動態網站。下面就先請大家跟我來學習一些 ASP 中應用指令碼語言(以 VBScript 為主)的基礎知識。
在開始學習指令碼語言之前,你應該理解一些簡單的概念 -- 變數、進程。所謂變數是電腦記憶體中已命名的儲存位置,其中包含了數字或字串等資料,它使使用者便於理解指令碼操作的名稱,為使用者提供了一種儲存、檢索和操作資料的途徑。程式是由一個或多個進程組成的,在 VBScript 中,進程就是“指令塊”,通常意義上的進程,如 Sub,只是為了簡單的資料處理。
在 VBScript 中,嚴格的來講變數是不用聲明的,
如:< % Mystring="This is my string" % >
然而,即使在使用變數前不需要去聲明變數,也應養成在編程時聲明變數的良好習慣,因為這樣有助於防止錯誤發生。聲明一個變數意味著告訴指令碼引擎,有一個特定名稱的變數,這樣就可以在指令碼中引用該變數。在 VBScript 中聲明一個變數可以使用“Dim”語句,如下:
< script language="VBScript" >
< !--
Option Explicit ' 要求在指令碼中聲明所有的變數
Dim Mystring
Mystring="This is my string"
-- >
< /script>
變數的範圍即生命期,決定哪些指令碼命令可訪問變數。在過程內部聲明的變數具有局部範圍。每執行一次過程,變數就被建立然後消亡。而過程外部的任何命令都不能訪問它。在過程外部聲明的變數具有全域範圍,其值能被 ASP 頁上的任何指令碼命令訪問和修改。聲明變數時,局部變數和全域變數可以有相同的名稱。而改變其中一個的值並不會改變另一個的值。如果沒有聲明變數,則可能不小心會改變一個全域變數的值。例如,以下指令碼命令傳回值 1,雖然有兩個名為 Y 變數:
< %
Dim YY = 1Call SetLocalVariableResponse.Write Y
Sub SetLocalVariable
Dim Y
Y = 2End Sub % >
由於變數沒有顯式聲明,以下的指令碼命令將返回 2。當程序呼叫將 Y 設定為 2 時,指令碼引擎認為該過程是要修改全域變數:
<%
Y = 1Call SetLocalVariableResponse.Write Y
Sub SetLocalVariable
Y = 2
End Sub% >
然而,全域變數僅在單個 ASP 頁中可用,要使它在單個 ASP 頁之外可用,就必須為變數賦予會話或Application 領域。會話範圍變數對一個使用者所請求的 ASP 應用程式中的所有頁都是可用的。Application 領域變數也如此。對單個使用者來說,會話變數是儲存資訊的最佳途徑,例如,使用者喜好設定、使用者名稱或使用者的標識。對於一個特殊應用程式的所有使用者,Application 領域是儲存資訊的最佳途徑,例如,應用程式特定的問候語或應用程式所需的初始值。ASP 提供兩個內建對象來讓您儲存變數:Session 對象和 Application 對象,這將在今後的 ASP 內建對象中著重討論。
讓我們再來看看常量的定義,常量是用來代替一個數或字串的名稱,它在整個指令碼中保持不變。您可以使用 Const 語句在 VBScript 中建立使用者自訂常數。使用 Const 語句可以建立名稱具有一定含義的字串型或數值型常數,並給它們賦原義值。例如:。
如:< % Const mystring=" 這是一個常量 " % >
< % Const myage=100 % >
請注意字串文字包含在兩個引號 (" ") 之間。這是區分字串型常數和數值型常數的最明顯的方法。日期文字和時間文字包含在兩個井號 (#) 之間。例如:
< % Const CutoffDate = #6-1-97# % >
在理解了常量和變數之後,我們來看看什麼是過程。它是一組能執行指定任務且具有傳回值的指令碼命令。您可以定義自己的過程,然後在指令碼中反覆調用它們。您可以將流程定義放在調用過程的 .asp 檔案中,也可以將通用過程放在一個共用的 .asp 檔案中,然後用 SSI #include 指令將其包含進其他調用其過程的 .asp 檔案中。您還可選擇另一種方法,即把這些功能打包在 ActiveX 組件中。流程定義可出現在 < SCRIPT > 和 < /SCRIPT > 標記內部且必須遵循聲明指令碼語言的規則。如果過程所用的語言與主指令碼語言不同,則要使用 < SCRIPT > 元素。主指令碼語言中的過程用指令碼分界符 (< % 和 % >) 分隔。用 HTML< SCRIPT > 標記時,必須使用兩個屬性來保證伺服器端能夠處理指令碼。使用 < SCRIPT > 標記的文法如下:
< SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT >
procedure definition
< /SCRIPT >
這裡的 RUNAT=SERVER 屬性通知 Web 服務器在伺服器上處理指令碼。若不設定該屬性,指令碼將由用戶端瀏覽器處理。LANGUAGE 屬性決定此指令碼塊所用的指令碼語言。您可以指定任何一種具有指令碼引擎的語言。請使用 VBSCRIPT 指定 VBScript;用 JSCRIPT 指定 JScript。若不設定 LANGUAGE 屬性,將用主指令碼語言解釋此指令碼塊。
在 VBScript 中,過程被分為兩類:子程序和 函數程序。子程序是包含在 Sub 和 End Sub 語句之間的一組 VBScript 語句,執行操作但不傳回值。子程序可以使用參數(由調用過程傳遞的常數、變數或運算式)。如果 子程序無任何參數,則 Sub 語句必須包含空括弧 ()。
函數程序是包含在 Function 和 End Function 語句之間的一組 VBScript 語句。函數程序與 子程序類似,但是 函數程序可以傳回值。函數程序可以使用參數(由調用過程傳遞的常數、變數或運算式)。如果 函數程序無任何參數,則 Function 語句必須包含空括弧 ()。函數程序通過函數名返回一個值,這個值是在過程的語句中賦給函數名的。Function 傳回值的資料類型總是 Variant。在下面的樣本中 子程序使用兩個固有的(或內建的)VBScript 函數,即 MsgBox 和 InputBox,來提示使用者輸入資訊。然後顯示根據這些資訊計算的結果。計算由使用 VBScript 建立的 函數程序完成,Celsius 函數將華氏度換算為攝氏度。子程序 ConvertTemp 調用此函數時,包含參數值的變數被傳遞給函數。換算結果返回到調用過程並顯示在訊息框中。
Sub ConvertTemp()
temp = InputBox(" 請輸入華氏溫度。", 1)
MsgBox " 溫度為 " & Celsius(temp) & " 攝氏度。"
End Sub
Function Celsius(fDegrees)
Celsius = (fDegrees - 32) * 5 / 9
End Function
給過程傳遞資料的途徑是使用參數。參數被作為要傳遞給過程的資料的預留位置。參數名可以是任何有效變數名。使用 Sub 語句或 Function 語句建立過程時,過程名之後必須緊跟括弧。括弧中包含所有參數,參數間用逗號分隔。例如,在下面的樣本中,fDegrees 是傳遞給 Celsius 函數的值的預留位置:
Function Celsius(fDegrees)
Celsius = (fDegrees - 32) * 5 / 9
End Function
要從過程擷取資料,必須使用 函數程序。請記住,函數程序可以傳回值;子程序不傳回值。
以上給大家簡要介紹了 VBScript,由於篇幅的原因,作者不可能在此詳盡介紹 VBScript 的所有知識。但是由於 ASP 本身並不是一種程式設計語言,因此在大家編寫 ASP 應用程式的過程中,必須藉助指令碼語言來實現許多特殊的功能,所以靈活熟練地掌握指令碼語言對一個使用 ASP 編寫 WEB 應用程式的程式員來說是至關重要的。無論您是一個有豐富編程經驗的高手還是一個初學者,只要您現在希望通過 ASP 編寫 WEB 應用程式,作者極力建議您掌握至少一門指令碼語言(如 VBScript)。在本篇的末尾作者將留一道課後作業給大家,希望各位能通過自學有關書籍並在實踐中迅速掌握指令碼語言。
課後作業:
作者正在用 ASP 製作一套基於 WEB 的 BBS 系統,作者希望能在其中添加一項特殊功能,即當任何使用者登陸該 BBS 後都能夠查閱近七天來所有新發布的資訊。由於 ASP 本身的內建對象和組件並沒有提供此項功能,因此作者請大家從 VBScript 著手,來設計這樣一個功能。如有任何疑問請 EMAIL 作者,答案將在下一篇公布。敬請關注。