使用VB创建ASP服务器端组件

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
使用 VB 创建 ASP 服务器端组件   本篇文章通过与传统的设计方法相比较,介绍了如何在 ASP代码中调用 VB组件的方法。在本篇文章中,我们假设读者具有 VBASP的相关入门知识。 服务器端组件和客户端组件的比较 服务器端组件和客户端组件有许多不同之处。 服务器端组件是在计算机服务器上注册的DLL文件,客户端组件则在浏览器运行的计算机上注册,在IE中,这些客户端组件被称作ActiveX浏览器插件组件。 ActiveX客户端组件可以使用 VB编写,并通过互联网或内联网发送给浏览器,生成很精彩的效果。问题是,ActiveX客户端组件只限于IE,而使用 VB编写的 服务器端组件则能够产生纯HTML代码,适用于所有的浏览器。 服务器端组件的最大问题是该组件必须在Windows+IIS环境中或与IIS的API兼容的应用中运行。相比较而言,在服务器端实现这种兼容性似乎更容易一些。 IIS 服务器端组件驻留在与IIS相同的内存空间中,并随时准备服务器上处理的 ASP网页的调用。从理论上说,我们可以在返回浏览器的 ASP代码中插入任何文本或代码,但一般来说,大多数 服务器端组件被用来处理需要大量时间的计算或数据库信息查找,然后将所得到的结果以HTML代码的形势返回给浏览器。 VB组件的解析 由于本篇文章旨在讨论编写 VB组件的基本方法,因此在能够说明问题的情况下,其中的例子将是十分简单的。在详细讨论编写 VB组件之前,我们将首先从概念上对 VB组件作一番剖析。 在使用 VB编写服务器端的组件时,有三个分层次的概念(在 VBASP代码中都会用到)需要注意: ·Project名字 ·Class名字 ·Method名字 VB工程的名字就是Project名字。许多开发人员都将Project名字看作是组件名字,但 VB只将它看作是工程的名字。在我们的例子中,Project名字是ExampleProject,当然了,我们可以随意命名自己的工程名字;Class名字名字是ExampleClass,Method名字是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 objReference = Server.CreateObject("ExampleProject.ExampleClass") VB组件将从 ASP代码中接受3个变量的值,并向 ASP代码返回一个值,该值将存储在名字为strMethodReturn的 ASP变量中。下面的代码显示出 ASP代码是如何得到由 VB组件返回的值的,它向 VB方法传送三个名字分别为Param1、Param2和Parma3的三个参数值: strMethodReturn = objReference.ExampleMethod(Param1, Param2, Param3) Param1、Param2、Param3这三个参数必须与 VB组件中方法的定义完全相同,下面是二行实例化 VB组件的类、并调用类的方法获得返回值的 ASP代码的例子: Set objReference = Server.CreateObject("ExampleProject.ExampleClass")strMethodReturn = objReference.ExampleMethod(Param1, Param2, Param3) 下面的图表直观地显示了 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组件的方法代码的变量): strName (String) intAge (Integer) blnAgeEmphasisOn (Boolean) 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 ExampleMethod(ByVal strName As String, _                           ByVal intAge As Integer, _                  Optional ByVal blnAgeEmphasisOn As Boolean = False) As String

    在上面的代码中,我们将方法定义成了一个Public函数,这意味着该组件之外的任何代码都能够调用它,由于是一个函数,它还会向调用它的代码返回一个值。 Public Function ExampleMethod() As String 上面的代码表示ExampleMethod()函数将向它的调用者返回一个字符串类型的值。 我们的 VB方法带有3个从 ASP代码接受值的参数变量,最后一个参数变量是可选的。所有用来从 VB组件之外接收值的参数变量都需要在 VB方法的括号间定义和使用,我们可以象在方法内定义的变量那样使用以这种方式定义为方法参数的变量,二者之间唯一的区别是外面的 ASP代码来决定它们的值。 下面是三个变量和它们的数据类型:          ByVal strName As String           ByVal intAge As Integer  Optional ByVal blnAgeEmphasisOn As Boolean = False  上面的代码定义了三个方法参数的数据类型,指明它们是按值传送的,而且第三个参数是可选的,如果没有第三个参数,则其缺省值为False。 然后,我们将在方法的定义中添加一些必要的逗号、空格和底划线(_),这样才能符合 VB的语法要求。我们将把参数列表放在方法定义的括号中间,得到的方法定义如下: Public Function ExampleMethod(ByVal strName As String, _                             ByVal intAge As Integer, _                    Optional ByVal blnAgeEmphasisOn As Boolean = False) As String  在 VB的代码窗口输入上面的方法定义,就会生成一个End Function语句。方法的定义和End Function之间就是我们编写自己的代码的地方了。 我们在方法的主体中添加的第一行代码就是定义一个字符串变量,用来存储该方法返回的字符串数据。我们可以不使用字符串变量而使用字符串向调用方法的代码返回文本数据。 Dim strReturnString As String 下面我们就可以来建立返回的字符串了。我们可以通过方法的参数列表使用由 ASP代码传送的strName变量值。首先将strName参数变量值与字符串“is over”连接起来。接下来我们将使用intAge参数变量计算一个已经生存的天数,然后在前面的字符串上再添加“age in days”字符串。需要注意的是,我们需要将intAge * 365二个整型数的乘积转换为字符串,然后才能将它组合在strReturnString字符串, VB中的Cstr()方法可以实现这一目的。 strReturnString = strName & " is over " & CStr(intAge * 365) 如果假设从 ASP代码中传给组件的姓名为Eric Clapton,年龄参数为56,因此,strReturnString应当包含下面的内容: Eric Clapton is over 20440 我们最终的字符串会根据intAge变量的值是否超过45和blnAgeEmphasisOn变量是否设置为true再添加上 “days old”或“days OLD”。下面的代码可以实现该功能: If blnAgeEmphasisOn And intAge > 44 Then       strReturnString = strReturnString & " days OLD."  Else       strReturnString = strReturnString & " days old."  End If 如果 ASP代码没有将blnAgeEmphasisOn变量的值作为方法参数传送给组件,根据我们的方法定义,它的值将被缺省地设置为false。如果它被设置为true,而且intAge变量的值大于45,我们将得到下面的输出: Eric Clapton is over 20440 days OLD. 否则,我们会得到下面的输出: Eric Clapton is over 20440 days old. 为了将上面的字符串返回给调用组件的 ASP代码,我们将字符串的值赋给方法的名字: ExampleMethod = strReturnString 完整的方法代码如下所示: Public Function ExampleMethod(ByVal strName As String, _                             ByVal intAge As Integer, _                    Optional ByVal blnAgeEmphasisOn As Boolean = False) As String        '/ 建立局部变量      Dim strReturnString As String        '/  创建返回的变量的值      strReturnString = strName & " is over " & CStr(intAge * 365)        '/ 完善strReturnString      If blnAgeEmphasisOn And intAge > 44 Then          strReturnString = strReturnString & " days OLD."      Else          strReturnString = strReturnString & " days old."      End If        '/ 返回字符串      ExampleMethod = strReturnString    End Function ASP代码中调用VB方法 ASP代码中实例化VB对象 我们需要的大部分 ASP代码已经在前面的A Conceptual Overview进行了讨论。在 ASP代码中,我们仍然需要依次完成下面的工作: ·使用 ASP Server对象的CreateObject()方法实例化 VB组件。 ·使用合适的方法参数变量调用组件的方法。 ·将从 VB方法中返回的字符串值赋给 ASP变量中的一个变量。 ·然后在Response.Write()方法中使用该变量将字符串发送给浏览器。 我们将使用 ASP文件中的一些代码对 VB组件的类进行实例化,下面是 VB组件实例化的代码: Set objReference = Server.CreateObject("ExampleProject.ExampleClass") ASP Server对象的CreateObject()方法返回 VB代码对象的地址,因此我们能够在 ASP中调用类的任何一个public方法。需要注意的是,作为 ASP CreateObject()方法的方法参数的是 VB工程和类的名字,objReference用来保持组件的类的对象实例的引用。 在 ASP文件中使用组件的方法 现在,我们就可以使用组件的类方法ExampleMethod,得到一个表明一个人以天计的寿命。下面的代码使用参数的值,并将从方法中返回的字符串的值赋给一个名字为strMethodReturn的变量: strMethodReturn = objReference.ExampleMethod("Eric Clapton", 56, True) 提示:当我们的组件被实例化后,objReference就表示CreateObject()方法中出现过的ExampleProject.ExampleClass。尽管我们可以将objReference.ExampleMethod看作与ExampleProject.ExampleClass.ExampleMethod()等同,但我们不能这样使用。 当然了,我们也可以使用变量而不是直接的值作为方法的参数,选择的参数变量的名字无须与 VB方法参数表中的相同,它们只要与参数表中的非可选参数个数、类型、顺序相同就可以了。 ASPName = "Eric Clapton" ASPAge = 56 ASPEmphasis = True strMethodReturn = objReference.ExampleMethod( ASPName, ASPAge, ASPEmphasis) 使用变量取代值使代码显得更清晰,也更具有可管理性,尤其是代码变得很长时。 现在我们只要在 ASP Response.Write()方法中将strMethodReturn返回给访问 ASP代码的浏览器即可。下面是完整的 ASP代码,在代码的结束处,我们添加了一行分离组件对象地址的代码,以清除组件的对象代码: <%'/ 实例化组件对象Set objReference = Server.CreateObject("ExampleProject.ExampleClass")'/ 设置作为方法参数的局部变量 ASPName = "Eric Clapton" ASPAge = 56 ASPEmphasis = True'/ 调用组件的方法,存储返回值strMethodReturn = objReference.ExampleMethod( ASPName, ASPAge, ASPEmphasis)'/ 将返回值发送给访问的浏览器Response.Write(strMethodReturn)'/ 清除组件的对象Set objReference = Nothing%> 将上面的 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组件中调用编写的组件的方法,这将进一步提高代码的灵活性和模块化程度。 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
定义: 这是一款桌面级的WEB服务器 包含一个静态的http服务器与一个js脚本引擎 可以展示静态的网页与生成简单的动态页面 适合个人在windows服务器上面简单的建立http服务 支持情况: 静态http session application(仅仅能存取文本) 服务端执行的js脚本 数据库访问(反正ODBC支持的库都支持) 自定义的com组件引用 简易说明: 1 建立站点 打开编辑 设置 输入站点名称与路径 点击添加即可建立一个站点 如: myweb c: www 注意路径要以 结尾 在站点根目录下添加filter sjs与endfilter sjs(这是两个必须的过滤器 如无需写代码放两个空文件即可) 2 静态资源与动态页面 在server sjs里的server execFileTypes定义可以配置将哪些文档类型作为动态页面 当请求静态资源时会直接返回资源 当请求一个动态页面时 请求会依次在filter sjs 请求页面 endfilter sjs 进行转发 当然也可以在filter sjs里写代码来终止转发 动态页面中如果文档类型为 sjs服务器将识别为纯的服务端执行js脚本(好比servlet什么的) 在其他类型的动态页面文档中 目前有3种类型嵌入标签可用: <%c %>标签表示嵌入一段服务端执行js脚本 如:<body><%c response responseText+ "hello js"%>< body> 将返回页面<body>hello js< body> <%i %>标签表示引用资源 如:<%i src "parts part htm"%> <% %>标签表示插值 如:<body><% "hello js"%>< body> 将返回页面<body>hello js< body> 3 com组件引用 为了让web应用有更多功能扩展 该服务器可以在脚本中引用其他com组件 这里有2种引用方法 一种方法在设置里面添加引用变量名 组件名 引用类型;来添加其他com组件的引用 组件名写成 组件工程名 组件类名 形式 就像使用CreateObject时一样 引用类型可写sing与muti 其中sing为所有请求共用一个组件实例对象 muti为每个请求引用独立的组件实例对象 另外还可以在代码里使用objectLoader loadComObject attr comNm 来添加组件引用 attr为引用变量名 comNm为组件名 注意:一个新的组件在引用前应先用regsvr32 dll注册">定义: 这是一款桌面级的WEB服务器 包含一个静态的http服务器与一个js脚本引擎 可以展示静态的网页与生成简单的动态页面 适合个人在windows服务器上面简单的建立http服务 支持情况: 静态http session application(仅仅能存取文本 [更多]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值