明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

WebClasses使注冊變得容易

[摘要]使用VB6的新的WebClass技術(shù)使得容易創(chuàng)建靈活而又功能 強(qiáng)大的基于Internet應(yīng)用程序 今年早些時(shí)候,我們曾向你展示了如何編寫一個(gè)注冊應(yīng)用程序,它允許用戶訪問你的頁面并注冊一個(gè)軟件產(chǎn)品.["Create a User Registration Class,"VBPJ ...

使用VB6的新的WebClass技術(shù)使得容易創(chuàng)建靈活而又功能 強(qiáng)大的基于Internet應(yīng)用程序
今年早些時(shí)候,我們曾向你展示了如何編寫一個(gè)注冊應(yīng)用程序,它允許用戶訪問你的頁面并注冊一個(gè)軟件產(chǎn)品.["Create a User Registration Class,"VBPJ 1998年4月和"Add E-Mail Registration to your Server,"VBPJ 1998年5月].在注冊后,應(yīng)用程序?qū)⑼ㄟ^e-mail給用戶發(fā)一個(gè)序列號,同時(shí)還存在一個(gè)跟Web的連接以繼續(xù)注冊過程.早些時(shí)候給你示范的VB5應(yīng)用程序創(chuàng)建了一個(gè)運(yùn)行在Web服務(wù)器上的ActiveX DLL和一個(gè)測定用戶的狀態(tài)的并適當(dāng)?shù)恼{(diào)用該DLL的相應(yīng)的ASP腳本.(Active Server Page).現(xiàn)在VB6為編寫這種類型的應(yīng)用程序提供了一種新的手段,既使用新技術(shù)-WebClass.

簡而言之,WebClass是運(yùn)行在Web服務(wù)器上的ActiveX DLL.它允許客戶端的瀏覽器上的HTML頁的超鏈接激活服務(wù)器DLL中的事件.WebClass的編程模式類似于傳統(tǒng)的VB模式-不同之處在于,VB中是窗體中包含控件,而WebClass應(yīng)用程序是Web頁面包含控件.在服務(wù)器端,對于開發(fā)者來說他知道完整的的VB事件模型,這樣可以進(jìn)行高度的交互式的Web開發(fā).在本專欄中,我們將討論如何創(chuàng)建一個(gè)簡單的WebClass應(yīng)用程序,向你說明這事是多么簡單.

為創(chuàng)建一個(gè)簡單的WebClass應(yīng)用程序,你應(yīng)啟動(dòng)VB6并在新工程的對話框中選擇IIS應(yīng)用程序.在屬性窗口中將工程命名為SimpleReg.雙擊工程瀏覽器中的WebClass設(shè)計(jì)器.(你能可通過View菜單看到屬性窗口和工程瀏覽器).在屬性窗口中,命名WebClass為wcSimple并在NameURL屬性中輸入SimpleReg.這將在編譯ActiveX DLL時(shí)創(chuàng)建一個(gè)名為SimpleReg.asp的啟動(dòng)文件.接著保存該工程.
一個(gè)WebClass應(yīng)用程序通過使用HTML模板在用戶的瀏覽器上顯示HTML.由于VB6沒有包括HTML編輯器,你必須在VB6外創(chuàng)建一個(gè)HTML模板(VB6的DHTML設(shè)計(jì)器完全跟WebClass無關(guān)).你可以用任意的HTML編輯器,但由于Visual Studio包括Visual InterDev(VID) 6.0,所以VID是合理的選擇.

在VB6的Tools Options菜單中為Visual Basic設(shè)定Visual Staudio為缺省的HTML編輯器.在Advanced標(biāo)號,將如下Visual InterDev的路徑-C:\Promram Files\Microsoft Visual Studio\Common\IDE IDE98\Devenv.exe填入外部的HTML編輯框中.你將通知Visual InterDev制作用于你的工程的模板文件的副本.如:你的模板叫WebPage.htm的話,那InterDev創(chuàng)建一個(gè)名為Web1Page.htm的副本.如果你用記事本或其他編輯器創(chuàng)建你的模板時(shí)請考慮到這一點(diǎn).

在例程代碼中,SimpleReg.htm文件是一個(gè)由Visual InterDev創(chuàng)建的模板.在WebClass設(shè)計(jì)器的左邊的窗格中,選擇HTML Template WebItem文件夾.如下操作可在工程中添加SimpleReg模板:點(diǎn)擊AddHTML Template WebItem鍵并在文件選擇對話框中選擇SimpleReg.htm文件(見圖1).命名該新的WebItem為tplSimple.雙擊tplSimple查看關(guān)于WebClass的代碼.找到WebClass_Start過程并用如下代碼代替原來生成的代碼以在加載WebClass時(shí)顯示模板:

Private Sub WebClass_Start()
'顯示主要的HTML模板 www.knowsky.com
Session("Title") = "Enter Your" & "Registration Information"
tplSimple.WriteTemplate
End Sub

WebClass_Start過程類似于傳統(tǒng)的VB應(yīng)用程序的Form_Load過程.運(yùn)行程序并觀看你的瀏覽器所展示的HTML頁.退出瀏覽器并終止VB應(yīng)用程序.(這是在調(diào)試開發(fā)過程中的正常的關(guān)閉WebClass的方法).

在WebClass設(shè)計(jì)器中,右擊tplSimple WebItem并從上下文菜單中選擇編輯HTML模板.你將在你的缺省的HTML編輯器中看到模板頁.閱讀源代碼,你能看到這是一個(gè)有三種特殊的被稱為標(biāo)簽的部分組成的簡單的頁,格式如下:

<WC@TAGTITLE>Title</WC@TAGTITLE>

這些標(biāo)簽的文本部分的("Title")在運(yùn)行時(shí)被你所添加到WebClass的代碼取代.當(dāng)執(zhí)行WrieteTemplate方法時(shí),它為HTML模板中的所找到的每個(gè)標(biāo)簽調(diào)用一次稱為ProcessTag的特殊過程.回到VB,雙擊tplSimple WebItem顯示代碼窗口.在代碼窗口的上部的組合框內(nèi)選擇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參數(shù)中的HTML代碼以替換標(biāo)簽.在tplSimple中設(shè)定斷點(diǎn).WriteTemple加到WebClass_Start過程中,并運(yùn)行你的應(yīng)用程序.在斷點(diǎn),用F8單步調(diào)試該工程以看看事件的發(fā)生的順序.你將看到ProcessTag過程被調(diào)用了三次-為模板中的每個(gè)標(biāo)簽調(diào)用一次.真正酷的事是:在運(yùn)行過程中過程將用能在瀏覽器中產(chǎn)生文本框的HTML代碼取代E-mail和Name標(biāo)簽.

能交互式地調(diào)試你的服務(wù)器端的事件代碼是用VB開發(fā)WebClass應(yīng)用程序的的非常強(qiáng)大的功能之一.在VB5的Web開發(fā)中,ASP腳本中的VBScript完成了大量的工作.你不可能在ASP腳本中交互式地調(diào)試VBScript-唯一可行的不幸的途徑是錯(cuò)誤,再試.然而在VB6中,所有的服務(wù)器端的代碼都是在WebClass中運(yùn)行的并且你可以利用VB的優(yōu)秀的設(shè)計(jì)環(huán)境進(jìn)行交互式地調(diào)試.

連接一個(gè)事件

下一步是在該簡單的應(yīng)用程序中為窗體中的Register Me按鈕添加事件處理代碼.回到VB的WebClass設(shè)計(jì)器,點(diǎn)擊tplSimple WebItem.在右邊的窗格中,你將看到一列該頁中的HTML成員,你可以將事件跟它們聯(lián)系起來.右擊Form1標(biāo)簽并選擇Connect to Custom Event菜單項(xiàng),并注意到緊挨著Form1的位于Target列中的事件名稱.快速的看一下HTML模板(右擊tplSimple并選擇編輯HTML模板).找到窗體的成員,它們現(xiàn)在是象這樣的.

<FORM method = 'post' action = SimpleReg.ASP?WCI=tplSimple _
&amp;WCE=RegisterMe&amp;WCU>

SimpleReg.asp是特殊的ActiveXDLL啟動(dòng)腳本.問號后的值表明WebClass Item(WCI)是tplSimple,WebClass事件(WCE)是RegisterMe,WebClass URLData(WCU)是空的.當(dāng)用戶在瀏覽器中點(diǎn)擊Register Me按鈕時(shí),這一行將激活A(yù)ctiveX服務(wù)器DLL中的tplSimple_RegisterMe按鈕.就這樣,窗體的活動(dòng)就跟服務(wù)器端的事件聯(lián)系起來,但是你能在瀏覽器中設(shè)定超鏈接以激活服務(wù)器里事件.WebClass對Web應(yīng)用程序的開發(fā)如同魔法一般-它們將VB的事件驅(qū)動(dòng)的編程方式擴(kuò)展到基于瀏覽器的應(yīng)用程序.

雙擊VB設(shè)計(jì)器的左邊窗格中的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是一種返回來自瀏覽器頁面的數(shù)據(jù)的標(biāo)準(zhǔn)方法.它設(shè)置了一些Session變量并重新顯示同樣的HTML頁.在If聲明處設(shè)定一個(gè)斷點(diǎn)并運(yùn)行工程.輸入一個(gè)email地址和名字,點(diǎn)擊Register Me按鈕.你將看到標(biāo)題處被刷新了,但是文本框是空的,這是由于你在寫模板的時(shí)候沒有對它們輸入相應(yīng)的值.終止工程并改變tplSimple_ProcessTag過程(從DevX中下載Listing 1;欲知細(xì)節(jié),請看Download Free Code框).基于Session變量給文本框賦值.運(yùn)行工程看看將發(fā)生什么.

用ADO進(jìn)行數(shù)據(jù)訪問

最后,增加一種從數(shù)據(jù)庫中存儲(chǔ)和獲取記錄的方法.為簡單起見,我們用Microsoft Acess 97作為我們的數(shù)據(jù)庫.在你的源目錄下用Acess創(chuàng)建一個(gè)新的數(shù)據(jù)庫并命名為Register.mdb.添加一個(gè)有兩個(gè)域的表,它們分別是Email和Name,并存盤.當(dāng)Acess提示你創(chuàng)建一個(gè)唯一的索引域時(shí)選OK,把Register.mdb的一個(gè)拷貝放到你的C驅(qū)的根目錄下面.

在工程中,添加一個(gè)Microsoft ActiveX Data Object庫的引用,你能在Project Reference下找到….你可以用ADO庫1.5版或2.0版.如果你沒有安裝ADO庫,你可以從微軟的站點(diǎn):http://www.microsoft.com/data/ado上下載MDAC2.0安裝工具包.改變tplSimple.RegisterMe過程中的代碼(從DevX中下載Listing 2;欲知細(xì)節(jié),請看Download Free Code框).

該代碼將窗體中的數(shù)據(jù)存入Session變量中,然后打開ADO記錄集并查找Email地址(從DevX中下載Listing 3).

如果找到,該代碼將返回記錄.如果沒有找到,它將添加新的記錄.該函數(shù)設(shè)定了連接串:

private Function Connect() As String
'返回一個(gè)ADO連接串
Const kDB = "DBQ=c:\register.mdb;"
Const kDrv = "Drive={Microsoft" & "Acess Driver (*.mdb)}"
Connect = kDB & kDrv
End Function

在tplSimple_RegisterMe中設(shè)置一個(gè)斷點(diǎn),運(yùn)行程序,看看數(shù)據(jù)訪問代碼是如何工作的.這個(gè)簡單的例子向你表明了在ADO中編程是如何的簡單.記住在你的公司中所配置的任何 "真正"的應(yīng)用程序應(yīng)該包括出錯(cuò)處理.一般來說,你也將用到注冊來保存諸如連接串信息這樣的變量并且你將需要提供一種刷新記錄,刪除不需要的記錄的方法.

當(dāng)你編譯工程時(shí),將會(huì)發(fā)生兩件事.第一件事是:如同在VB中的任何ActiveX工程一樣,將會(huì)在開發(fā)機(jī)上生成ActiveX DLL記錄.第二件事是:將產(chǎn)生一個(gè)以WebClass的NameInURL屬性所指定的名字命名的特殊的ASP啟動(dòng)文件.在例程中,該文件的名字是:SimpleReg.asp.看看記事本中的腳本.當(dāng)用戶在瀏覽器中輸入該文件的URL時(shí),IIS創(chuàng)建一個(gè)SimpleReg.wcSimple WebClass的實(shí)例.微軟建議你無論如何不要改變該ASP腳本.

從用戶的觀點(diǎn)來看,注冊應(yīng)用程序的WebClass版類似于1998年5月展示的那一系列.本系列的代碼的確跟早些時(shí)候展示的系列是類似的,不同之處在于:現(xiàn)在所有的代碼都包括在WebClass中,并且啟動(dòng)的ASP文件不包括任何用戶信息.

注意事項(xiàng)

通過對在此前后的應(yīng)用程序的比較,你應(yīng)該對WebClass是怎么樣進(jìn)行工作的有個(gè)一致的認(rèn)識了.然而,你可能仍然不愿意立即把你的Web應(yīng)用程序轉(zhuǎn)化為WebClass工程.轉(zhuǎn)化一個(gè)應(yīng)用程序需要相當(dāng)多的時(shí)間,但是你應(yīng)該這樣做,因?yàn)檫@樣做存在切實(shí)的好處.比如說:WebClass允許你按照以前沒有的方式創(chuàng)建或者擴(kuò)展應(yīng)用程序.

總而言之,微軟為我們提供了一套用于開發(fā)互連網(wǎng)應(yīng)用程序的工具集.當(dāng)然用VB5開發(fā)Web應(yīng)用程序也是可行的,但你得用大量的小編程技巧使得ASP腳本正確地跟VB DLL相互影響.脫離了VBScript的局限,也不存在缺乏真實(shí)的事件驅(qū)動(dòng)的編程環(huán)境的困繞.WebClass給VB帶來Web開發(fā)的充分的功能-它的確是個(gè)好東西.