基于Visual Basic的ASP组件的开发

时间:2022-10-06 07:07:00

基于Visual Basic的ASP组件的开发

摘要:组件是对数据和方法的简单封装,组件有自己的属性和方法,使用组件可以实现拖放式编程、快速的属性处理以及真正的面向对象的设计。组件技术日益成为软件开发新技术。本文详细介绍了动态网页开发中使用ASP组件的优势,ASP组件的特点,开发的工具以及一般开发流程。并以文件读取ASP组件为例,对Visual Basic中组件的开发作了具体阐述,并应用于Web应用程序。本文对了解ASP组件构成,以及利用组件进行三层应用程序开发有很好的借鉴作用。

关键词:组件;COM;线程;VB;ASP

中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)05-11290-01

1 引言

ASP(Active Server Page,活动服务器网页)是一种运行于服务器端的Web应用程序开发技术,是一种服务器端的脚本语言环境。通过使用ASP指令、HTML语句,以及ASP提供的内置ActiveX组件可建立动态、交互且高效的Web服务器应用程序。组件在ASP应用程序开发中发挥了极大的、便利的作用,如我们经常使用ADO组件访问数据库,进行数据查询、更改;使用Tools组件生成随机数,检查文件是否存在或处理HTML表格;使用Ad Rotator组件显示广告信息,设置其变更频率。不仅如此,ASP还支持面向对象的可扩展ActiveX组件功能,允许使用第三方语言创建特定功能的服务器端组件,以扩展ASP的功能。

2 为什么要开发ASP组件

ASP组件是在ASP环境下工作COM/COM+对象,基于COM+,其中封装了一些只能在ASP环境下使用的对象以实现某种特定的功能,可以在ASP页面中直接调用或者通过其它ASP组件间接调用。如果某一个ASP组件不需要访问ASP对象模型提供ASP专用对象,那么它就是一个一般ActiveX组件。

那么为什么要在ASP应用程序中使用ASP组件来代替ASP脚本呢?原因有三:

(1)ASP组件的重用性好。将一个ASP脚本打包以便大量其他页面反复使用它,这是比较麻烦的,并且用户可以轻易地看到脚本功能实现的源代码,还可以自行修改,这是很不安全的。将重用的代码放在组件中进行管理不仅效率高,而且组件是基于二进制的,安全性好。

(2)ASP组件本身可以存在于任何地方,甚至在不同机器上,通过远程访问技术实现ASP应用的分布式处理,增加处理多用户访问的能力。

(3)ASP组件可以实现脚本语言不支持或无法实现的功能。如ASP应用可能需要调用Windows内核,或者需要管理文件的输入输出,用VBScript或Jscript很难实现,而通过文件读写组件(File Access Component)可以方便地读写服务器端的文件。

3 用什么样的工具开发ASP组件

在ASP组件的开发上,没有所谓“正确”的工具,只要能够创建与COM相兼容的对象的工具都能用来创建ASP组件,如C++、Visual Baisc、Delphi和Java等。使用Visual Basic来编写的ASP组件和使用Visual C++编写的相同组件相比较并没有明显的优势,只是Visual C++调用了更多的底层COM架构,效率更高,但Visual C++使用起来更困难,而Visual Baisc更容易一些。

由于COM是一种基于二进制的网络标准,通过使用这种机器级的通信,使用Visual C++编写的组件可以调用Java编写组件所暴露的函数,而Java组件也可以调用Visual C++对象中的函数。

所以我们在选择组件开发工具时可根据自身对语言的掌握程度以及组件自身的要求选择一种合适的工具。本文下列组件的创建选择简单易行的Visual Basic工具。

4 怎样开发ASP组件

在使用VB创建一个ASP组件之前我们通常考虑以下问题:

4.1 创建哪种类型组件

ASP组件实际上就是ActiveX控件,它分为进程内组件(ActiveX DLL)和进程外组件(ActiveX 可执行文件)。进程内组件与创建组件的应用共享地址空间(内存及其他资源),当组件被调用时,方法的参数被装入的客户自己的堆栈中,提高了组件性能。当组件远离客户时,一般要使用进程内(dllhost.exe)进程外组件对于每个客户请求,组件自己可以为每个进程赋予不同的线程,这样组件可以远离客户而无须使用进程内。方法的参数通过一个列集进程在两个进程之间传递,列集所做的就是通过客户端的服务器从堆栈中提取参数以及通过存根向堆栈中放置参数。

Visual Basic支持这两种类型组件。在一个小型应用程序中,我们考虑创建一个进程内组件。

4.2 组件实例为哪种类型

Visual Basic支持单线程和套间线程两种进程内组件线程模式。如果选择单线程组件,那么客户将在主线程上创建组件,而不是在创建它的进程上,所有组件的访问以队列的形式限制在主线程上,导致多用户访问瓶颈。考虑到Web应用程序本身就是多用户的,组件在任何时候都要处理多个对象请求,对于进程内组件来说,最好的线程模型选择是套间线程。套间线程是Visual Basic唯一支持的一种多线程模型,组件的实例在与创建实例的客户相同的线程中创建,每个对组件的请求都产生一个新的对象实例,组件可以在任何时刻处理多个对象请求。在Visual Basic环境中可以通过设置组件类的Instancing属性选择单线程或套间线程(MultiUse)。

在VB环境下创建一个ASP组件的步骤:

(1)Visual Basic,选择ActiveX DLL项目类型创建进程内组件,或选择ActiveX EXE项目类型创建进程外组件。得到一个项目文件,其中包含一个默认的类文件。设置类文件Instancing属性为MultiUse;

(2)在类文件中添加子程序或函数,创建组件的方法。两者的差别就是子程序不需要返回值。因为组件将来要被外部(ASP)访问,因此定义为Public。对于子程序或函数的参数传递一般选择按值传递;

(3)保存项目文件和类文件,并且利用Make cpmponentname.dll项生成DLL文件;

(4)将组件拷贝到C:\winnt\system32\,执行C:\winnt\system32\regsvr32 *.dll,注册组件。

要取消注册这个dll,使用:

C:\winnt\system32\regsvr32 /u *.dll

5 一个ASP组件实例

下面是实现文本文件读、写功能的一个组件。组件名称为ASP01.dll,类的名称为TextRW,方法名称为Readtext和Writetext。

Option Explicit

Function readtext(ByVal filename1 As String) As String

'将文件名通过参数形式传递给函数

Dim Line As String,str As String,filenumber As String

filenumber = FreeFile

Open filename1 For Input As #filenumber'打开文件

Do While Not EOF(filenumber)

Line Input #filenumber, Line '分行读取文件内容

str = str + Line + "

"'

回车换行

Loop

read = str

Close #filenumber

End Function

Public Sub writetext(ByVal filename As String, ByVal name As String, ByVal code As String)

Dim filenumber As String

filenumber = FreeFile

Open filename For Append As #filenumber

Write #filenumber,name,code '将参数值写入文件

Close #filenumber

End Sub

6 实例组件在ASP应用程序中的运用

dim obj

set obj=server.createobject("asp001.readRW")

'创建组件实例

dim msg

msg=obj.readtext("H:\项目\ASP项目\创建组件2\text.dat")

'读文件

response.write"" & msg & ""

'在网页中显示文本文件内容

obj.writetext"H:\项目\ASP项目\创建组件2\text.dat","刘杨","8543215" '往文件里添加内容

set obj=nothing

%>

7 结束语

以上介绍了ASP组件的特点和基于VB环境开发ASP组件的一般方法。使用ASP组件技术使Web应用程序的开发远远超过建立网页相互连接的简单水平,降低了对Web程序设计人员的要求,使一般Web程序设计人员集中精力针对应用需求开发安全、高效的可扩展的三层应用程序。组件技术完全隐藏所有数据和实现细节,通过接口提供有效服务,有效节省资源消耗和进行软件重用,具有广泛的发展前景。

参考文献:

[1]雨於志渊. 动态Web网页技术大全[M]. 清华大学出版社,1999.10.

[2]杜春雷, 孙会莲, 等. 如何使用Visual Basic 6.0中文版[M]. 机械工业出版社,1999.5.

[3]Sbelley Powers. ASP组件开发指南[M]. 中国电力出版社,2002.4.

[4]吉根林, 崔海源. Web程序设计[M]. 电子工业出版社,2002.8.

本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:计算机辅助卡诺图化简逻辑 下一篇:基于VHDL语言的8路抢答器控制系统设计