明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

用VB完成WEB交互式應(yīng)用

[摘要]摘要 本文介紹了Internet應(yīng)用程序及相關(guān)概念,并通過一個示例,介紹了使用VB創(chuàng)建IIS應(yīng)用程序來構(gòu)建交互式WEB應(yīng)用的方法。   關(guān)鍵字 Internet應(yīng)用程序,IIS,HTML   Mic...
摘要 本文介紹了Internet應(yīng)用程序及相關(guān)概念,并通過一個示例,介紹了使用VB創(chuàng)建IIS應(yīng)用程序來構(gòu)建交互式WEB應(yīng)用的方法。
  關(guān)鍵字 Internet應(yīng)用程序,IIS,HTML

  Microsoft Visual Basic 6.0增強了創(chuàng)建Internet應(yīng)用程序的功能。Internet應(yīng)用程序是一種編譯好的交互式應(yīng)用程序,通過Internet或intranet能夠訪問這種應(yīng)用程序。在VB中有兩種類型的Internet應(yīng)用程序:基于服務(wù)器的IIS應(yīng)用程序和基于客戶的DHTML應(yīng)用程序;诜⻊(wù)器的IIS應(yīng)用程序駐留在WEB服務(wù)器上,應(yīng)用程序使用HTTP Internet協(xié)議接受從客戶端(如WEB瀏覽器)來的請求,處理相關(guān)的代碼,然后向瀏覽器返回數(shù)據(jù)。IIS應(yīng)用程序是一個VB應(yīng)用程序,它在一個動態(tài)的、基于瀏覽器的應(yīng)用程序中使用HTML和已編譯VB代碼的組合。對開發(fā)者來說,一個IIS應(yīng)用程序是由一些被稱為WebClass的特殊類型對象組成,而WebClass包含一系列稱為Webitems的資源。WebClass是一個駐留在WEB服務(wù)器上并響應(yīng)瀏覽器輸入的VB部件,它作為應(yīng)用程序的中央功能單元,處理來自瀏覽器的數(shù)據(jù)并向用戶發(fā)送響應(yīng)信息。
  本文通過示例一個WEB應(yīng)用--電話號碼查詢,說明創(chuàng)建IIS應(yīng)用程序的一般過程。運行此程序需要IIS3.0、IIS4.0 或 PWS。用戶在查詢界面輸入要查詢部門相應(yīng)的漢語拼音縮寫或名稱縮寫,如為空,則提示輸入部門名稱;系統(tǒng)以表格形式返回模糊查詢結(jié)果。

一、創(chuàng)建工程及模板
電話查詢界面模板文件的代碼如下:
<html>
<body bgcolor="#F6FAFF">
<p align="center"><font size="6" face="幼圓"><strong>辦公電話號碼查詢</strong></font></p>
<p><font size="4" face="黑體">查詢說明:</font>
您可以直接輸入各部門的全名或主要名稱,也可輸入各部門漢語拼音首字符縮寫串;查詢結(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">請輸入要查詢的部門:</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元素外,沒有用于數(shù)據(jù)輸入的元素,但多了"wc@error"等標記。Wc@標記是模板中使用的替換指示符。替換指示符是標記要用特定內(nèi)容替換的位置,以備在用戶請求時執(zhí)行文本替換過程。這些標記具有標記前綴和標記名,標記前綴用于指示W(wǎng)ebClass必須進行一個替換操作。通過設(shè)置每一個模板的TagPrefix屬性定義標記前綴。Wc@是VB的缺省標記前綴。標記名可以識別替換的區(qū)域。執(zhí)行文本替換是在一個WebClass模板文件中掃描特殊的指示符標記,然后用自定義的內(nèi)容替換指示符或它們的內(nèi)容。當WebClass在一個事件過程中響應(yīng)WriteTemplate方法時,它自動處理這些指示符。替換完成后,響應(yīng)用戶一個替換過的HTML文件。

對含有標記前綴文件的處理順序是:VB處理用戶的代碼,并從應(yīng)用程序的一個事件處理程序中調(diào)用WriteTemplate方法。WebClass根據(jù)ProcessTag事件的代碼處理并替換文件中所有前綴標記,然后將模板文件寫到Response對象,WriteTemplate方法再發(fā)送模板文件到瀏覽器。

啟動VB6,在新建工程中選擇IIS應(yīng)用程序。首先看到WebClass設(shè)計器,包含"HTML模板WebItems"和"自定義WebItems"。右擊WebClass設(shè)計器的"HTML模板WebItems",選擇"添加HTML模板",導入上述界面模板文件,然后將其命名為Phone_Search。

二、實現(xiàn)代碼
雙擊WebClass設(shè)計器右邊窗格的Form1標記,為表單提交動作定義一個自定義事件。該事件主要任務(wù)是接收用戶輸入的要查詢數(shù)據(jù),并把查詢數(shù)據(jù)提交到數(shù)據(jù)庫。具體代碼見清單。

IIS應(yīng)用程序應(yīng)該指定用戶首次訪問時顯示的內(nèi)容,因此,在WebClass_Start事件中將WebClass的NextItem屬性設(shè)置為Phone_Search,然后在Phone_Search_Respond事件中用模板的WriteTemplate方法將頁面發(fā)送到客戶端瀏覽器。在將頁面發(fā)送到瀏覽器時,系統(tǒng)會遇到模板中的wc@標記,此時它會自動調(diào)用Phone_Search的ProcessTag事件,并把標記名字作為參數(shù)傳遞給事件處理過程Phone_Search_Respond,在這個過程中返回插入文檔內(nèi)定制標記所在位置的HTML代碼。當在表單中輸入數(shù)據(jù)并提交表單時,則執(zhí)行Phone_Search_Form1過程,它接收表單的數(shù)據(jù),如沒有錯誤則調(diào)用自定義事件處理過程Searphone,該過程提交輸入數(shù)據(jù)到數(shù)據(jù)源,執(zhí)行查詢并以表格形式返回結(jié)果集。

代碼清單:
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
'響應(yīng)用戶請求過程
Private Sub phone_search_Respond()
'響應(yīng)用戶請求,輸出頁面
phone_search.WriteTemplate
End Sub

Private Sub phone_search_Form1()
strError = ""
'獲取表單值
FullName = Request("FullName")
'測試是否為空
If FullName = "" Then strError = strError & "<i>部門不能為空!</i>"
'如表單輸入值為空,則提示輸入數(shù)據(jù),否則調(diào)用查詢過程
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
'打開數(shù)據(jù)源
Dbconn.Open "telphone"
'構(gòu)造查詢SQL語句
Mysql = "select * from phone where depart like '%" & FullName & "%'" & _
" or depart_p like '%" & FullName & "%'"
'執(zhí)行SQL查詢
Set mrd = Dbconn.Execute(Mysql)
'輸出查詢結(jié)果
With Response
.Write "<html>"
.Write "<body>"
.Write "<title>Search Results</title>"
.Write "<h1><font face=""Arial"">查詢結(jié)果如下:</font></h1>"
If mrd.BOF And mrd.EOF Then '沒有符合條件的值
.Write "<center>對不起,沒有相應(yīng)的部門!</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
'釋放變量,關(guān)閉數(shù)據(jù)庫連接
Set mrd=Nothing
Dbconn.close
End Sub

本例程使用了ACCESS數(shù)據(jù)庫表Phone,DSN名為Telphone,表結(jié)構(gòu)及部分示例數(shù)據(jù)如下。
Phone表結(jié)構(gòu):
字段名 類型 長度 說明
PhoneID 自動編號 長整形 主鍵
Depart 文本 20
Depart_p 文本 10
Phone_no 文本 7
示例數(shù)據(jù):
1 網(wǎng)管中心 Wgzx 2419039
2 網(wǎng)管辦 Wgb 2419187
3 計算機系辦公室 Jsjxb 2419237
4 計算機系主任辦公室 Jsjxb 2419236
5 計算機系實驗室 Jsjxsys 2419234

如用戶輸入"網(wǎng)管"或"wg"后,程序響應(yīng)其請求。

三、部署IIS應(yīng)用程序
一個IIS應(yīng)用程序必須作為一個進程內(nèi)部件或一個DLL文件被創(chuàng)建。象編譯其它VB工程一樣,選擇生成DLL文件。IIS應(yīng)用程序編譯時產(chǎn)生以下文件:一個VB用于運行工程的DLL文件;一個在瀏覽器中宿主應(yīng)用程序并產(chǎn)生它的運行時部件的ASP文件;一個在編譯和連接工程時由連接器產(chǎn)生的EXP文件;一個包含工程的窗口布局信息的VBW文件。然后使用VB的打包和展開向?qū)聿渴餓IS應(yīng)用程序。必須部署的應(yīng)用程序包括DLL文件,與工程相關(guān)的HTML頁面及被HTML頁面引用的文件。

四、小結(jié)
用VB構(gòu)造服務(wù)器端的IIS應(yīng)用程序比其它的WEB應(yīng)用開發(fā)具有減少每個用戶部署費用,可重復使用部件,代碼和HTML分離,高效等優(yōu)點;而且由于對VB環(huán)境的熟悉,可以充分利用傳統(tǒng)的編程方法。

參考資料:Microsoft MSDN 之Visual Basic文檔
(本示例程序在Windows 98+PWS下運行成功)