使用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开发的充分的功能-它的确是个好东西.