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