使用VB6的新的WebClass技術使得容易創建靈活而又功能強大的基於Internet應用程序今年早些時候,我們曾向你展示瞭如何編寫一個註冊應用程序,它允許用戶訪問你的頁面並註冊一個軟體產品.["Create a User Registration Class,"VBPJ 1998年4月和"Add E-Mail Registration to your Server,"VBPJ 1998年5月].在註冊後,應用程式將透過e-mail發送一個序列號,同時還存在一個跟Web的連接以繼續註冊過程.早些時候給你示範的VB5應用程序創建了一個運行在Web伺服器上的ActiveX DLL和一個測定用戶的狀態的並適當的調用該DLL的對應的ASP腳本.(Active Server Page).現在VB6為編寫這種類型的應用程式提供了一種新的手段,既使用新技術-WebClass.
簡而言之,WebClass是運行在Web伺服器上的ActiveX DLL.它允許客戶端的瀏覽器上的HTML頁的超連結啟動伺服器DLL中的事件.WebClass的程式模式類似於傳統的VB模式-不同之處在於,VB中是窗體中包含控制項,而WebClass應用程式是Web頁麵包含控制項.在伺服器端,對於開發者來說他知道完整的的VB事件模型,這樣可以進行高度的互動的Web開發.在本專欄中,我們將討論如何創建一個簡單的WebClass應用程式,向你說明這事是多麼簡單.
為創建一個簡單的WebClass應用程式,你應啟動VB6並在新工程的對話框中選擇IIS應用程式.在屬性視窗中將工程命名為SimpleReg.雙擊工程瀏覽器中的WebClass設計器.(你能透過View選單看到屬性視窗和工程瀏覽器).在屬性視窗中,命名WebClass為wcSimple並在NameURL屬性中輸入SimpleReg.這將在編譯ActiveX DLL時創建一個名為SimpleReg.asp的啟動檔.接著儲存該工程.
一個WebClass應用程式透過使用HTML模板在使用者的瀏覽器上顯示HTML.由於VB6沒有包含HTML編輯器,你必須在VB6外創建一個HTML模板(VB6的DHTML設計器完全跟WebClass無關).你可以用任意的HTML編輯器,但由於Visual Studio包括Visual InterDev(VID) 6.0,所以VID是合理的選擇.
在VB6的Tools|Options菜單中為Visual Basic設定Visual Staudio為缺省的HTML編輯器.在Advanced標號,將如下Visual InterDev的路徑-C:Promram FilesMicrosoft Visual StudioCommonIDE|IDE98Devenv.exe填入外部的HTML編輯框中.你將通知Visual InterDev製作用於你的工程的範本文件的副本.如:你的模板叫WebPage.htm的話,那InterDev創建一個名為Web1Page.htm的副本.如果你用記事本或其他編輯器創建你的模板時請考慮到這一點.
在例程代碼中,SimpleReg.htm檔案是一個由Visual InterDev建立的範本.在WebClass設計器的左邊的窗格中,選擇HTML Template WebItem資料夾.如下操作可在工程中新增SimpleReg範本:點選AddHTML Template WebItem鍵並在檔案選擇對話方塊中選擇SimpleReg.htm檔案(見圖1).命名該新的WebItem為tplSimple.雙擊tplSimple查看關於WebClass的程式碼.找到WebClass_Start過程並用如下程式碼取代原來產生的程式碼以在載入WebClass時顯示模板:
Private Sub WebClass_Start()
'顯示主要的HTML範本www.downcodes.com
Session("Title") = "Enter Your" & "Registration Information"
tplSimple.WriteTemplate
End Sub
WebClass_Start過程類似於傳統的VB應用程式的Form_Load過程.執行程式並觀看你的瀏覽器所展示的HTML頁.退出瀏覽器並終止VB應用程式.(這是在偵錯開發過程中的正常的關閉WebClass的方法).
在WebClass設計器中,右鍵點選tplSimple WebItem並從上下文選單中選擇編輯HTML模板.你將在你的缺省的HTML編輯器中看到模板頁.閱讀原始碼,你能看到這是一個有三種特殊的被稱為標籤的部分組成的簡單的頁,格式如下:
< WC@TAGTITLE>Title</WC@TAGTITLE >
這些標籤的文本部分的("Title")在運行時被你所加入到WebClass的程式碼取代.當執行WrieteTemplate方法時,它為HTML模板中的所找到的每個標籤調用一次稱為ProcessTag的特殊過程.回到VB,雙擊tplSimple WebItem顯示程式碼視窗.在程式碼視窗的上部的組合框內選擇tpSimple_ProcessTag過程,並加入如下程式碼:
Dim sHTM As String
Select Case TagName
Case " WC@TAGTITLE "
TagContents =Session("Title")
Case " WC@TAGMAIL "
sHTM = "Enter Email Address:<br>"
sHTM = sHTM & "<input type= 'text'"
sHTM = sHTM & " name= 'Email'><br>"
TagContents = sHTM
Case " WC@TAGNAME "
sHTM = "Name:<br>"
sHTM = sHTM & "<input type= 'text'"
sHTM = sHTM & " name= 'Name'><br>"
TagContents = sHTM
End Select
回傳TagContent參數中的HTML程式碼以替換標籤.在tplSimple中設定斷點.WriteTemple加到WebClass_Start過程中,並運行你的應用程式.在斷點,用F8單步調試該工程以看看事件的發生的順序.你將看到ProcessTag過程被調用了三次-為模板中的每個標籤調用一次.真正酷的事是:在運行過程中過程將用能在瀏覽器中產生文本框的HTML程式碼取代E-mail和Name標籤.
能互動式地調試你的伺服器端的事件程式碼是用VB開發WebClass應用程式的的非常強大的功能之一.在VB5的Web開發中,ASP腳本中的VBScript完成了大量的工作.你不可能在ASP腳本中交互式地調試VBScript-唯一可行的不幸的途徑是錯誤,再試.然而在VB6中,所有的伺服器端的程式碼都是在WebClass中運行的並且你可以利用VB的優秀的設計環境進行交互式地調試.
連接一個事件
下一步是在該簡單的應用程序中為窗體中的Register Me按鈕添加事件處理代碼.回到VB的WebClass設計器,點擊tplSimple WebItem.在右邊的窗格中,你將看到一列該頁中的HTML成員,你可以將事件跟它們聯繫起來.右鍵單擊Form1標籤並選擇Connect to Custom Event菜單項目,並注意到緊挨著Form1的位於Target列中的事件名稱.快速的看一下HTML模板(右鍵tplSimple並選擇編輯HTML模板).找到窗體的成員,它們現在是像這樣的.
<FORM method = 'post' action = SimpleReg.ASP? WCI=tplSimple _
&WCE=RegisterMe&WCU>
SimpleReg.asp是特殊的ActiveXDLL啟動腳本.問號後的值表明WebClass Item(WCI)是tplSimple,WebClass事件(WCE)是RegisterMe,WebClass URLData(WCU)是空的.當用戶在瀏覽器中點擊Register Me按鈕時,這一行將激活ActiveX伺服器DLL中的tplSimple_RegisterMe按鈕.就這樣,窗體的活動就跟伺服器端的事件聯繫起來,但是你能在瀏覽器中設定超鏈接以激活伺服器裡事件.WebClass對Web應用程式的開發如同魔法一般-它們將VB的事件驅動的程式設計方式擴展到基於瀏覽器的應用程式.雙擊
VB設計器的左邊窗格中的RegisterMe事件以顯示程式碼視窗,將如下程式碼加入該事件:
If Len(Request.Form("Email")) = 0 Then
Session("Titile") = "Please" & "Enter an Email Address!"
Session("Email") = ""
Session("Name") = ""
Else
Session("Title") = "Here is" & "your Entry!"
Session("Email") = Request.Form("Email")
Session("Name") = Reuquest.Form("Name")
End If
TplSimple.WriteTemplate
Request.Form是一種傳回來自瀏覽器頁面的資料的標準方法。它設定了一些Session變數並重新顯示相同的HTML頁.在If宣告處設定一個斷點並執行工程.輸入一個email地址和名字,點擊Register Me按鈕.你將看到標題處被刷新了,但是文本框是空的,這是由於你在寫模板的時候沒有對它們輸入相應的值.終止工程並改變tplSimple_ProcessTag過程(從DevX下載Listing 1;欲知細節,請看Download Free Code框).基於Session變量給文本框賦值.運行工程看看將發生什麼.
用ADO進行數據訪問
最後,增加一種從數據庫中存儲和取得記錄的方法.為簡單起見,我們用Microsoft Acess 97作為我們的資料庫.在你的來源目錄下用Acess建立一個新的資料庫並命名為Register.mdb.新增一個有兩個網域的表,它們分別是Email和Name,並存檔.當Acess提示你建立一個唯一的索引域時選OK,把Register.mdb的一個拷貝放到你的C驅的根目錄下面.
在工程中,添加一個Microsoft ActiveX Data Object庫的引用,你能在Project|Reference下找到….你可以用ADO庫1.5版或2.0版.如果你沒有安裝ADO庫,你可以從微軟的站點:http://www.microsoft.com/data /ado上下載MDAC2.0安裝工具包.改變tplSimple.RegisterMe過程中的代碼(從DevX中下載Listing 2;欲知細節,請看Download Free Code框).
該代碼將窗體中的數據存入Session變數中,然後打開ADO記錄集並查找Email地址(從DevX中下載Listing 3).
如果找到,該代碼將返回記錄.如果沒有找到,它將添加新的記錄.該函數設定了連接串:
private Function Connect() As String
'返回一個ADO連接串
Const kDB = "DBQ=c:register.mdb;"
Const kDrv = "Drive={Microsoft" & "Acess Driver (*.mdb)}"
Connect = kDB & kDrv
End Function
在tplSimple_RegisterMe中設定一個斷點,運行程式,看看資料存取程式碼是如何運作的.這個簡單的例子向你表明了在ADO中程式設計是如何的簡單.記住在你的公司中所配置的任何"真正"的應用程式應該包括出錯處理.一般來說,你也將用到註冊來保存諸如連接串信息這樣的變量並且你將需要提供一種刷新記錄,刪除不需要的記錄的方法.
當你編譯工程時,將會發生兩件事.第一件事是:如同在VB中的任何ActiveX工程一樣,將會在開發機上生成ActiveX DLL記錄.第二件事是:將產生一個以WebClass的NameInURL屬性所指定的名字命名的特殊的ASP啟動檔案.在例程中,該檔案的名字是:SimpleReg.asp.看看記事本中的腳本.當使用者在瀏覽器中輸入該檔案的URL時, IIS創建一個SimpleReg.wcSimple WebClass的實例.微軟建議你無論如何不要改變該ASP腳本.
從用戶的觀點來看,註冊應用程序的WebClass版類似於1998年5月展示的那一系列.本系列的代碼的確跟早些時候展示的系列是類似的,不同之處在於:現在所有的代碼都包括在WebClass中,並且啟動的ASP文件不包括任何用戶信息.
注意事項
通過對在此前後的應用程序的比較,你應該對WebClass是怎麼樣進行工作的有個一致的認識了.然而,你可能仍然不願意立即把你的Web應用程式轉化為WebClass工程.轉化一個應用程式需要相當多的時間,但是你應該這樣做,因為這樣做存在切實的好處.比如說:WebClass允許你按照以前沒有的方式創建或者擴展應用程序.
總而言之,微軟為我們提供了一套用於開發互連網應用程序的工具集.當然用VB5開發Web應用程式也是可行的,但你得用大量的小編程技巧使得ASP腳本正確地跟VB DLL相互影響.脫離了VBScript的局限,也不存在缺乏真實的事件驅動的編程環境的困繞.WebClass給VB帶來Web開發的充分的功能-它的確是個好東西.