【VB开源代码栏目提醒】:以下是网学会员为您推荐的VB开源代码-使用VB创建服务器端组件 - 技术总结,希望本篇文章对您学习有所帮助。
使用
VB创建服务器端组件 本篇文章通过与传统的
设计方法相比较介绍了如何在ASP
代码中调用
VB组件的方法。
在本篇文章中我们假设读者具有
VB和ASP的相关入门知识。
服务器端组件和客户端组件的比较 服务器端组件和客户端组件有许多不同之处。
服务器端组件是在计算机服务器上注册的DLL文件客户端组件则在浏览器运行的计算机上注册在IE中这些客户端组件被称作ActiveX浏览器插件组件。
ActiveX客户端组件可以使用
VB编写并通过互联网或内联网发送给浏览器生成很精彩的效果。
问题是ActiveX客户端组件只限于IE而使用
VB编写的服务器端组件则能够产生纯HTML
代码适用于所有的浏览器。
服务器端组件的最大问题是该组件必须在WindowsIIS环境中或与IIS的API兼容的应用中运行。
相比较而言在服务器端实现这种兼容性似乎更容易一些。
IIS服务器端组件驻留在与IIS相同的内存空间中并随时准备服务器上处理的ASP网页的调用。
从理论上说我们可以在返回浏览器的ASP
代码中插入任何文本或
代码但一般来说大多数服务器端组件被用来处理需要大量时间的计算或数据库信息查找然后将所得到的结果以HTML
代码的形势返回给浏览器。
VB组件的解析 由于本篇文章旨在讨论编写
VB组件的基本方法因此在能够说明
问题的情况下其中的例子将是十分简单的。
在详细讨论编写
VB组件之前我们将首先从概念上对
VB组件作一番剖析。
在使用
VB编写服务器端的组件时有三个分层次的概念在
VB和ASP
代码中都会用到需要注意 ·Project名字 ·Class名字 ·Method名字
VB工程的名字就是Project名字。
许多开发人员都将Project名字看作是组件名字但
VB只将它看作是工程的名字。
在我们的例子中Project名字是ExampleProject当然了我们可以随意命名自己的工程名字Class名字名字是ExampleClassMethod名字是ExampleMethod。
工程名字组件名字也可以是由组件
代码编译后得到的DLL文件的名字该DLL文件将包含有被IIS用来向浏览器返回文本或
HTML代码的经过编译的
VB代码。
方法名字指的是管理特定
代码功能的
VB代码部分例如计算日期或显示数据库中所有作者的清单。
组件方法有点角个黑盒子它完成特定的工作或根据输入的信息返回特定的信息。
一般情况下在一个组件中可以有多个方法。
为了更有效地管理组件的方法可以将方法按照相似的分类组合在一起这就是组件类的作用。
组件类能够在内存中生成组件类
代码的一个拷贝在使用ASP
代码创建对象时它也被称作对象这就是实例化。
一旦有了组件类
代码实例的对象引用我们就可以从ASP
代码中调用类中包含的方法。
在我们的例子中工程、类、方法的名字将用来在ASP
代码中实例化
VB组件并以方法参数的形式从ASP
代码中向
VB代码传送值在ASP
代码中接收从
VB方法中返回的值。
从ASP文件中调用
VB组件 我们用来调用
VB组件的ASP文件将使用对象变量保存
VB对象的引用。
在ASP文件中可以使用ASP Server对象的CreateObject方法创建一个对象该方法将返回一个它创建的对象的引用。
在例子中我们将使用objReference作为组件的对象变量。
下面的
代码显示ASP
代码在实例化
VB组件时需要使用组件的工程名和类名ExampleProject和ExampleClass。
实例化
VB组件的ASP
代码 Set objReferenceServer.CreateObjectExampleProject.ExampleClass
VB组件将从ASP
代码中接受3个变量的值并向ASP
代码返回一个值该值将存储在名字为strMethodReturn的ASP变量中。
下面的
代码显示出ASP
代码是如何得到由
VB组件返回的值的它向
VB方法传送三个名字分别为Param1、Param2和Parma3的三个参数值 strMethodReturnobjReference.ExampleMethodParam1Param2Param3 Param1、Param2、Param3这三个参数必须与
VB组件中方法的定义完全相同下面是二行实例化
VB组件的类、并调用类的方法获得返回值的ASP
代码的例子 Set objReferenceServer.CreateObjectExampleProject.ExampleClassstrMethodReturnobjReference.ExampleMethodParam1Param2Param3 下面的图表直观地显示了
VB组件的工程、类和方法名字是如何与ASP文件中的组件实例化
代码协调的。
在逐步地
学习如何编写例子中的
VB代码和ASP文件时可以将下面的图表作为参考。
VB方法的作用 我们例子中简单的
VB组件将获得用户的名字和年龄然后返回一个以天计的用户的年龄而且有一个可选项能够提醒某个用户是否已经超过了45岁。
如果我们向组件传送一个虚构的Eric Clapton作为方法的第一个参数值将第二个参数设置为56我们将得到下面的返回字符串 Eric Clapton is over 20440 days old. 如果我们将可选的第三个参数设置为True这一参数将使方法判断用户是否已经超过45岁我们将会得到下面的返回字符串 Eric Clapton is over 20440 days OLD. 由于使用了三个完全不同的变量━━用户的姓名、年龄以及表示他们是否超过了45岁因此我们需要使用三个方法参数将这些信息从ASP文件传送给
VB代码。
在
VB中考虑要使用哪些数据类型是十分重要的。
我们将使用一个名字为strName的字符串型变量表示用户的姓名名字为intAge的整型变量表示用户的年龄名字为blnAgeEmphasisOn的布尔型变量表明用户是否已经超过了45岁。
三个方法参数传送给
VB组件的方法
代码的变量 strNameStringintAgeIntegerblnAgeEmphasisOnBoolean 在
VB中创建服务器端组件 启动
VB后在新工程窗口中双击ActiveX DLL图标。
一旦
VB加载了新的ActiveX DLL工程至少会看到二个打开的窗口工程窗口和属性窗口。
如果有一个窗口显示不出来可以从
VB的菜单中选择查看菜单项分别使用查看-工程管理器、查看-属性窗口。
由于
VB对第一个工程和类的缺省命名分别是Project1、Class1我们可以将它们分别改为ExampleProject和ExampleClass。
工程名字的修改可以在工程窗口中进行。
在工程窗口中新输入的工程名字左侧有一个带有或-的小方框。
如果显示的是号选择该小方框号就会变成-号缺省的类名Class1就会显示在工程名字的下面。
在工程窗口中选择缺省的类名在属性窗口中将缺省的类名修改为ExampleClass。
在保存工程时
VB会将包含类的
代码保存在一个扩展名为CLS的文件工程文件的扩展名为VBP其中存储有工程的各种设置、文件名和文件存储的位置。
服务器端组件的属性值 在属性窗口中显示ExampleClass类的属性注意Instancing属性的值为5 MultiUse如果将工程的类型设置为标准的EXE工程该属性的值就会随之发生改变。
在
VB的菜单中选择工程-ExampleProject属性就会显示出工程属性窗口。
在常规标签的右下端的线程模式属性的值应当被设置为单元线程这将使多个访问者能够同时使用我们的组件类的不同的实例。
另外选择无人值守执行和驻留内存二个选项避免
VB6中的内存泄露问题。
VB方法的
代码 现在我们就需要使用
VB的
代码窗口来输入
VB代码了。
如果
代码窗口还是一片空白那就输入下面的
代码好了 Option Explicit它将要求我们必须定义所有的变量。
Public Function ExampleMethodByVal strName As String_ ByVal intAge As Integer_ Optional ByVal blnAgeEmphasisOn As BooleanFalseAs String 在上面的
代码中我们将方法定义成了一个Public函数这意味着该组件之外的任何
代码都能够调用它由于是一个函数它还会向调用它的
代码返回一个值。
Public Function ExampleMethodAs String 上面的
代码表示ExampleMethod函数将向它的调用者返回一个字符串类型的值。
我们的
VB方法带有3个从ASP
代码接受值的参数变量最后一个参数变量是可选的。
所有用来从
VB组件之外接收值的参数变量都需要在
VB方法的括号间定义和使用我们可以象在方法内定义的变量那样使用以这种方式定义为方法参数的变量二者之间唯一的区别是外面的ASP
代码来决定它们的值。
下面是三个变量和它们的数据类型 ByVal strName As String ByVal intAge As Integer Optional ByVal blnAgeEmphasisOn As BooleanFalse 上面的
代码定义了三个方法参数的数据类型指明它们是按值传送的而且第三个参数是可选的如果没有第三个参数则其缺省值为False。
然后我们将在方法的定义中添加一些必要的逗号、空格和底划线_这样才能符合
VB的语法要求。
我们将把参数列表放在方法定义的括号中间得到的方法定义如下 Public Function ExampleMethodByVal strName As String_ ByVal intAge As Integer_ Optional ByVal blnAgeEmphasisOn As BooleanFalseAs String 在
VB的
代码窗口输入上面的方法定义就会生成一个End Function语句。
方法的定义和End Function之间就是我们编写自己的
代码的地方了。
我们在方法的主体中添加的第一行
代码就是定义一个字符串变量用来存储该方法返回的字符串数据。
我们可以不使用字符串变量而使用字符串向调用方法的
代码返回文本数据。
Dim strReturnString As String下面我们就可以来建立返回的字符串了。
我们可以通过方法的参数
列表使用由ASP
代码传送的strName变量值。
首先将strName参数变量值与字符串is over连接起来。
接下来我们将使用intAge参数变量计算一个已经生存的天数然后在前面的字符串上再添加age in days字符串。
需要注意的是我们需要将intAge365二个整型数的乘积转换为字符串然后才能将它组合在strReturnString字符串
VB中的Cstr方法可以实现这一目的。
strReturnStringstrNameis overCStrintAge365 如果假设从ASP
代码中传给组件的姓名为Eric Clapton年龄参数为56因此strReturnString应当包含下面的内容 Eric Clapton is over 20440 我们最终的字符串会根据intAge变量的值是否超过45和blnAgeEmphasisOn变量是否设置为true再添加上 days old或days OLD。
下面的
代码可以实现该功能 If blnAgeEmphasisOn And intAge 44 Then strReturnStringstrReturnStringdays OLD.Else strReturnStringstrReturnStringdays old.End If 如果ASP
代码没有将blnAgeEmphasisOn变量的值作为方法参数传送给组件根据我们的方法定义它的值将被缺省地设置为false。
如果它被设置为true而且intAge变量的值大于45我们将得到下面的输出 Eric Clapton is over 20440 days OLD. 否则我们会得到下面的输出 Eric Clapton is over 20440 days old. 为了将上面的字符串返回给调用组件的ASP
代码我们将字符串的值赋给方法的名字 ExampleMethodstrReturnString 完整的方法
代码如下所示 Public Function ExampleMethodByVal strName As String_ ByVal intAge As Integer_ Optional ByVal blnAgeEmphasisOn As BooleanFalseAs String/////建立局部变量Dim strReturnString As String/////创建返回的变量的值strReturnStringstrNameis overCStrintAge365/////完善strReturnString If blnAgeEmphasisOn And intAge 44 Then strReturnStringstrReturnStringdays OLD.Else strReturnStringstrReturnStringdays old.End If/////返回字符串ExampleMethodstrReturnString End Function 在ASP
代码中调用
VB方法 在ASP
代码中实例化
VB对象 我们需要的大部分ASP
代码已经在前面的A Conceptual Overview进行了讨论。
在ASP
代码中我们仍然需要依次完成下面的
工作 ·使用ASP Server对象的CreateObject方法实例化
VB组件。
·使用合适的方法参数变量调用组件的方法。
·将从
VB方法中返回的字符串值赋给ASP变量中的一个变量。
·然后在Response.Write方法中使用该变量将字符串发送给浏览器。
我们将使用ASP文件中的一些
代码对
VB组件的类进行实例化下面是
VB组件实例化的
代码 Set objReferenceServer.CreateObjectExampleProject.ExampleClass ASP Server对象的CreateObject方法返回
VB代码对象的地址因此我们能够在ASP中调用类的任何一个public方法。
需要注意的是作为ASP CreateObject方法的方法参数的是
VB工程和类的名字objReference用来保持组件的类的对象实例的引用。
在ASP文件中使用组件的方法 现在我们就可以使用组件的类方法ExampleMethod得到一个表明一个人以天计的寿命。
下面的
代码使用参数的值并将从方法中返回的字符串的值赋给一个名字为strMethodReturn的变量 strMethodReturnobjReference.ExampleMethodEric Clapton56True 提示当我们的组件被实例化后objReference就表示CreateObject方法中出现过的ExampleProject.ExampleClass。
尽管我们可以将objReference.ExampleMethod看作与ExampleProject.ExampleClass.ExampleMethod等同但我们不能这样使用。
当然了我们也可以使用变量而不是直接的值作为方法的参数选择的参数变量的名字无须与
VB方法参数表中的相同它们只要与参数表中的非可选参数个数、类型、顺序相同就可以了。
aspNameEric ClaptonaspAge56 aspEmphasisTrue strMethodReturnobjReference.ExampleMethodaspNameaspAgeaspEmphasis 使用变量取代值使
代码显得更清晰也更具有可管理性尤其是
代码变得很长时。
现在我们只要在ASP Response.Write方法中将strMethodReturn返回给访问ASP
代码的浏览器即可。
下面是完整的ASP
代码在
代码的结束处我们添加了一行分离组件对象地址的
代码以清除组件的对象
代码 /////实例化组件对象Set objReferenceServer.CreateObjectExampleProject.ExampleClass /////设置作为方法参数的局部变量aspNameEric ClaptonaspAge56 aspEmphasisTrue /////调用组件的方法存储返回值strMethodReturnobjReference.ExampleMethodaspNameaspAgeaspEmphasis /////将返回值发送给访问的浏览器Response.WritestrMethodReturn /////清除组件的对象Set objReferenceNothing 将上面的ASP
代码存储在一个ASP文件中将会产生下面的字符串输出 Eric Clapton is over 20440 days OLD. 使ASP
代码能够调用DLL文件 对我们的组件的测试就是让Windows知道它的存储位置以及ASP
代码何时调用它。
首先在
VB的菜单中选择运行图标或运行/开始
VB就会临时地向
系统注册该组件。
提示不能象加载HTML文件那样直接使用浏览器加载ASP文件ASP文件必须通过WEB服务器被加载到浏览器上。
浏览器将显示出Eric Clapton is over 20440 days OLD.的字样。
为了使组件能够在其他的服务器上运行它必须被编译成DLL文件然后在服务器上
注册。
当然了如果希望在开发用的计算机永久地使用该组件也需要进行编译、注册。
在其他
计算机上运行该组件的唯一文件就是编译得到的DLL文件当然了这需要计算机已经安装了
VB运行时间库文件。
如何编译组件源
代码得到DLL文件以及如何在计算机上注册组件不是本篇文章的讨论范围我们就不再详细叙述了。
作为编写IIS服务器端组件的一个副产品我们可以从任何ASP文件和其他
VB组件中调用编写的组件的方法这将进一步提高
代码的灵活性和模块化程度。