摘要 本文介紹了Internet應用程序及相關概念,并通過一個示例,介紹了使用VB創建IIS應用程序來構建交互式WEB應用的方法。 關鍵字 Internet應用程序,IIS,HTML
Microsoft Visual Basic 6.0增強了創建Internet應用程序的功能。Internet應用程序是一種編譯好的交互式應用程序,通過Internet或intranet能夠訪問這種應用程序。在VB中有兩種類型的Internet應用程序:基于服務器的IIS應用程序和基于客戶的DHTML應用程序。基于服務器的IIS應用程序駐留在WEB服務器上,應用程序使用HTTP Internet協議接受從客戶端(如WEB瀏覽器)來的請求,處理相關的代碼,然后向瀏覽器返回數據。IIS應用程序是一個VB應用程序,它在一個動態的、基于瀏覽器的應用程序中使用HTML和已編譯VB代碼的組合。對開發者來說,一個IIS應用程序是由一些被稱為WebClass的特殊類型對象組成,而WebClass包含一系列稱為Webitems的資源。WebClass是一個駐留在WEB服務器上并響應瀏覽器輸入的VB部件,它作為應用程序的中央功能單元,處理來自瀏覽器的數據并向用戶發送響應信息。 本文通過示例一個WEB應用--電話號碼查詢,說明創建IIS應用程序的一般過程。運行此程序需要IIS3.0、IIS4.0 或 PWS。用戶在查詢界面輸入要查詢部門相應的漢語拼音縮寫或名稱縮寫,如為空,則提示輸入部門名稱;系統以表格形式返回模糊查詢結果。
一、創建工程及模板 電話查詢界面模板文件的代碼如下: <html> <body bgcolor="#F6FAFF"> <p align="center"><font size="6" face="幼圓"><strong>辦公電話號碼查詢</strong></font></p> <p><font size="4" face="黑體">查詢說明:</font> 您可以直接輸入各部門的全名或主要名稱,也可輸入各部門漢語拼音首字符縮寫串;查詢結果將模糊匹配您所輸入的關鍵字.如輸入'網絡中心'或'wlzx'.</p> <hr size="1" color="#008080"> <form method="POST"> <wc@error></wc@error> <p align="center"><font size="4">請輸入要查詢的部門:</font></p> <wc@FullName></wc@FullName> <p align="center"> <font size="4"> <input type="submit" name="submit" value="發送" style="font-size: 15pt; font-family: 幼圓"> <input type="reset" name="reset" value="重設" style="font-family: 幼圓; font-size: 15pt"></font></p> </form> <hr size="1" color="#008080"> </body> </html> 可以看到,界面文件除了基本的HTML元素外,沒有用于數據輸入的元素,但多了"wc@error"等標記。Wc@標記是模板中使用的替換指示符。替換指示符是標記要用特定內容替換的位置,以備在用戶請求時執行文本替換過程。這些標記具有標記前綴和標記名,標記前綴用于指示WebClass必須進行一個替換操作。通過設置每一個模板的TagPrefix屬性定義標記前綴。Wc@是VB的缺省標記前綴。標記名可以識別替換的區域。執行文本替換是在一個WebClass模板文件中掃描特殊的指示符標記,然后用自定義的內容替換指示符或它們的內容。當WebClass在一個事件過程中響應WriteTemplate方法時,它自動處理這些指示符。替換完成后,響應用戶一個替換過的HTML文件。
對含有標記前綴文件的處理順序是:VB處理用戶的代碼,并從應用程序的一個事件處理程序中調用WriteTemplate方法。WebClass根據ProcessTag事件的代碼處理并替換文件中所有前綴標記,然后將模板文件寫到Response對象,WriteTemplate方法再發送模板文件到瀏覽器。
啟動VB6,在新建工程中選擇IIS應用程序。首先看到WebClass設計器,包含"HTML模板WebItems"和"自定義WebItems"。右擊WebClass設計器的"HTML模板WebItems",選擇"添加HTML模板",導入上述界面模板文件,然后將其命名為Phone_Search。
二、實現代碼 雙擊WebClass設計器右邊窗格的Form1標記,為表單提交動作定義一個自定義事件。該事件主要任務是接收用戶輸入的要查詢數據,并把查詢數據提交到數據庫。具體代碼見清單。
IIS應用程序應該指定用戶首次訪問時顯示的內容,因此,在WebClass_Start事件中將WebClass的NextItem屬性設置為Phone_Search,然后在Phone_Search_Respond事件中用模板的WriteTemplate方法將頁面發送到客戶端瀏覽器。在將頁面發送到瀏覽器時,系統會遇到模板中的wc@標記,此時它會自動調用Phone_Search的ProcessTag事件,并把標記名字作為參數傳遞給事件處理過程Phone_Search_Respond,在這個過程中返回插入文檔內定制標記所在位置的HTML代碼。當在表單中輸入數據并提交表單時,則執行Phone_Search_Form1過程,它接收表單的數據,如沒有錯誤則調用自定義事件處理過程Searphone,該過程提交輸入數據到數據源,執行查詢并以表格形式返回結果集。
代碼清單: Option Explicit Option Compare Text '聲明全局量 Dim FullName As String Dim strError As String '處理標記元素過程 Private Sub phone_search_ProcessTag(ByVal TagName As String, TagContents As String, SendTags As Boolean) Select Case LCase(TagName) '錯誤信息 Case "wc@error" If strError <> "" Then TagContents = "<hr><font color=""red"">" TagContents = TagContents & "請輸入要查詢的部門!" & _ strError & " <hr></font> <hr>" End If '查詢的部門 Case "wc@FullName" TagContents = "<center><input type=""text"" value=""" & FullName & """ name=""FullName""></center>" End Select End Sub '響應用戶請求過程 Private Sub phone_search_Respond() '響應用戶請求,輸出頁面 phone_search.WriteTemplate End Sub
Private Sub phone_search_Form1() strError = "" '獲取表單值 FullName = Request("FullName") '測試是否為空 If FullName = "" Then strError = strError & "<i>部門不能為空!</i>" '如表單輸入值為空,則提示輸入數據,否則調用查詢過程 If strError <> "" Then Set NextItem = phone_search Else SearPhone End If End Sub
Private Sub WebClass_Start() Set NextItem = phone_search End Sub
Public Sub SearPhone() Dim Mysql As String Dim Dbconn As New ADODB.Connection Dim mrd As New ADODB.Recordset '打開數據源 Dbconn.Open "telphone" '構造查詢SQL語句 Mysql = "select * from phone where depart like '%" & FullName & "%'" & _ " or depart_p like '%" & FullName & "%'" '執行SQL查詢 Set mrd = Dbconn.Execute(Mysql) '輸出查詢結果 With Response .Write "<html>" .Write "<body>" .Write "<title>Search Results</title>" .Write "<h1><font face=""Arial"">查詢結果如下:</font></h1>" If mrd.BOF And mrd.EOF Then '沒有符合條件的值 .Write "<center>對不起,沒有相應的部門!</center>" Else '有符合條件的值,以表格形式輸出 .Write "<center>" .Write "<table border=""5"" wide=""50%"">" .Write "<tr><td>部 門</td><td>電 話</td>" Do While Not mrd.EOF .Write "<tr><td>" .Write mrd("depart") .Write "</td><td>" .Write mrd("phone_no") .Write "</td> " mrd.MoveNext Loop End If .Write "</table>" .Write "<h1><font face=""Arial"">謝謝使用</font></h1>" .Write "</body>" .Write "</html>" End With '釋放變量,關閉數據庫連接 Set mrd=Nothing Dbconn.close End Sub
本例程使用了ACCESS數據庫表Phone,DSN名為Telphone,表結構及部分示例數據如下。 Phone表結構: 字段名 類型 長度 說明 PhoneID 自動編號 長整形 主鍵 Depart 文本 20 Depart_p 文本 10 Phone_no 文本 7 示例數據: 1 網管中心 Wgzx 2419039 2 網管辦 Wgb 2419187 3 計算機系辦公室 Jsjxb 2419237 4 計算機系主任辦公室 Jsjxb 2419236 5 計算機系實驗室 Jsjxsys 2419234
如用戶輸入"網管"或"wg"后,程序響應其請求。
三、部署IIS應用程序 一個IIS應用程序必須作為一個進程內部件或一個DLL文件被創建。象編譯其它VB工程一樣,選擇生成DLL文件。IIS應用程序編譯時產生以下文件:一個VB用于運行工程的DLL文件;一個在瀏覽器中宿主應用程序并產生它的運行時部件的ASP文件;一個在編譯和連接工程時由連接器產生的EXP文件;一個包含工程的窗口布局信息的VBW文件。然后使用VB的打包和展開向導來部署IIS應用程序。必須部署的應用程序包括DLL文件,與工程相關的HTML頁面及被HTML頁面引用的文件。
四、小結 用VB構造服務器端的IIS應用程序比其它的WEB應用開發具有減少每個用戶部署費用,可重復使用部件,代碼和HTML分離,高效等優點;而且由于對VB環境的熟悉,可以充分利用傳統的編程方法。
參考資料:Microsoft MSDN 之Visual Basic文檔 (本示例程序在Windows 98+PWS下運行成功)
|