下载第 16章 ASP脚本组件在研究 A S P时,一个首要问题是如何编写能够为 A S P页面提供运行期文本的组件。三年以来,我们使用了很多方法去解决这个问题,使用设计期 A c t i v e X控件 (Design-time ActiveX
C o n t r o l,D T C )和 A S P组件是解决这一问题的两种不同方法。
不要将 D T C与分布事件协同 (Distributed Transaction Coordinator)相混淆。
首先,D T C是可视化的,在调用 A S P页面之前,它关联于用于生成 A S P页面运行期文本的创作工具。可以将其理解为类似于先进的 Wo r d和 E x c e l宏。一旦它们完成运行并你保存了页面,
A S P脚本仅包含代替控件的文本。不必担心可能造成的额外的下载,因为程序已经使用了
D T C,而 D T C是开发期控件,因此运行时不进行任何多余的下载。通常,不必为自己的项目编写 D T C,而是使用开发工具提供的 D T C。例如 Visual InterDev就提供大量 D T C供使用。
正如在前面章节看到的,A S P组件更为直接和特定,并且只在运行期内发生作用。它们能够添加基于运行期环境的代码。这些组件用 C + +或 Visual Basic编写,并由 I I S控制在服务器上加载和执行。在使用 A S P时,将直接影响站点的整体性能。
本章将介绍用脚本语言编写的 A S P组件。这种 A S P组件是名为 Wi n d o w s脚本组件 ( Wi n d o w s
Script Component,W S C )的常用技术的一个特例。它使程序员能够仅仅使用一种脚本语言如
V B S c r i p t或 J S c r i p t编写几种类型的 C O M对象。如果正在使用 Windows 2000 或 IE 5.0,那么计算机上已经安装了这些组件。但是,也可以在 Windows NT环境下的 IIS 4.0中或 Windows 9x环境下的 P W S中运行。
所以,这里将简单介绍 W S C技术的主要特征,主要内容有:
使用脚本语言编写 C O M对象的技术基础。
怎样使用脚本语言编写 C O M对象。
怎样编写 A S P脚本组件。
ASP脚本组件同其他 A S P组件的区别。
在讲述理论之后,举个例子:用一种有力而易于维护的方法封装 H T M L的表以格式化数据。
16.1 使用 W S C的环境如果要重现在这章中所要讲述的所有内容,你的系统需要安装相应的一些程序。首先,
把浏览器指向微软脚本网站,h t t p,/ / m s d n,m i c r o s o f t,c o m / s c r i p t i n g并下载 W S C包,这是一个自安装文件,包含以下内容:
WSC的二进制驱动程序。
文档。
帮助编写组件的向导。
如果你已经安装了 Windows 2000或 IE 5.0,则系统已经具有其驱动程序。安装 Wi n d o w s
9 8或 IE 4.01的系统也是这样的,但其提供的是语法上稍有不同的较老版本。只要从微软的网站下载其软件包则一切可迎刃而解。
W S C向导并不包含在任何版本的浏览器和操作系统中,需要从微软站点下载。
16.2 一个 Wi n d o w s脚本组件下面从 Wi n d o w s脚本组件的定义开始:
一个 Wi n d o w s脚本组件就是一个使用脚本语言编写的 C O M对象。
初看这个定义会感觉到很奇怪:真的可以用脚本语言编写 C O M对象吗?下面的这些情况也说明了这种疑惑的合理性:
COM对象是二进制的文件,而 V B S c r i p t和 J S c r p t不生成二进制文件。
COM对象具有一个众所周知的二进制布局,脚本语言如何实现这种布局?
COM对象提供接口,如何使脚本语言也能这样做。
COM对象需要注册和一个 C L S I D,脚本语言如何处理这些问题。
上面的这些疑问将在下面给出相应的详尽解答。
16.2.1 发展历史最初,组件化 We b的尝试是由 1 9 9 7年发布的 I E 4实现的。到目前为止,I E仍是唯一的支持动态超文本标记语言 ( D H T M L ) S c r i p t l e t的浏览器 (它是今天 We b组件的原形 )。 D H T M L S c r i p t l e t
主要指嵌入另一 H T M L的 H T M L。通过使用一个特定的命名约定,子页面可以向容器页面提供一个可编程的接口,并允许容器页面调用其方法、属性或激活事件。
使用 DHTML Scriptlet同使用 A c t i v e X控件并没有什么不同,但是作为组件,二者主要分别用于 I E和 Visual Basic。从效率上来讲,它们并不是真正的由脚本语言编写的可重复使用组件。此外,DHTML Scriptlet组件是为显示用户界面而设计的,而不是作为被请求页面的辅助函数。
从 DHTML Scriptlet发展到 S c r i p t l e t
不久便产生了简单地称为 S c r i p t l e t的组件。它们便是今天 W S C的祖先。 S c r i p t l e t是一种常规的 C O M对象,可以从任何感知 C O M的开发工具调用,如 D e l p h i,P o w e r B u i l d e r,M F C和
Visual Basic。
DHTML Scriptlet同 S c r i p t l e t相比较,其本身并没有什么不同,而编写方式却大不相同。
组件源代码的结构由 H T M L和脚本代码的混合体变为 X M L。
C O M对象并不仅是代码。它提供标准的二进制布局。这意味着当编写 C O M对象时,至少需要考虑两方面信息,分别是实现的接口和注册数据。正如我们前面注意到的那样,使用脚本语言无法传递这种特殊的信息。
微软有两种选择,分别是:
重新选择一个特殊的命名约定以插入注册和接口信息。
或:
使用完全不同的语法编写组件。
微软选择了后者并使用 X M L定义组件的语法。
498计计 ASP 3 高级编程 下载
IE 4.01 Scriptlet同目前的 W S C的不同点在于:后者使用 X M L模式存储对象的附加信息。
16.2.2 HelloWorld WSC
W S C文件是扩展名为,w s c的 X M L文件,以前是,s c t。正如其他的 H e l l o Wo r l d例子一样,
W S C版的例子也是很简单:
脚本组件中所有的信息都必须置入 < c o m p o n e n t >,< / c o m p o n e n t >标记对中。也可以使用
< r e g i s t r a t i o n >,< p u b l i c >和 < s c r i p t >标记。它们分别用 C L S I D或 P r o g I D、实现的接口及其实际功能来描述 C O M对象。
现在你应当对 W S C文件有了一个初步的了解,下面将更为详尽地讲述如何构造 W S C。
16.3 WSC的结构首先,W S C的整个结构可以分解为如下三层:
描述层:提供组件的元数据信息。
脚本层:包含所需的脚本函数。
运行期层:以二进制提供给客户一个熟悉的 C O M布局。
图 1 6 - 1显示了 W S C源代码文件的不同层。
图 16-1 WSC的源代码结构第 1 6章 A S P脚本组件 计计 499下载描述层,定义对象的名称及其提供的方法等脚本层,包括组件工作所需的代码运行期层,包括解释脚本代码和向客户端提供相关的
COM布局的 DLL
WSC解释器
16.3.1 描述层在这一层中共有四种基本的标记可供使用,它们是:
<registration>
<public>
<implements>
<resource>
1,<registration>
< r e g i s t r a t i o n >标记包含了向 Wi n d o w s注册表中添加组件时需要使用的信息。在这里,可以对组件进行较少的描述,如 P r o g I D和 C l a s s I D,也可以是任何基于注册或取消注册的可执行代码。
举个例子,一个新创建的组件会有一个类似下面的注册标记:
d e s c r i p t i o n和 v e r s i o n属性是可选的,但是必须至少指定一个 p r o g i d和 c l a s s i d属性。否则,
当试图注册组件时将产生错误。
当为单一类型的 W S C创建 C O M对象时,必须有一个 C L S I D。没有 C L S I D的 W S C无法工作,
所以在注册过程中自动生成 C L S I D。如果不指定 C L S I D,特定的注册 C O M对象的系统程序
( r e g s v r 3 2,e x e )会为它创建一个。但是要记住,只有最新的用于 IE 5.0,Windows 2000和 W S C
包的 r e g s v r 3 2,e x e才会这样做。否则,注册过程将崩溃。
P r o g i d用于在如 V B S c r i p t的 C r e a t e O b j e c t或 J S c r i p t的 A c t i v e X O b j e c t这样的后绑定函数中创建对象实例。实际上,在脚本开发环境中,一个没有 P r o g I D的组件几乎没有任何作用。不定义 P r o g I D,将无法用 C r e a t e O b j e c t或 A c t i v e X O b j e c t来创建对象实例。只有 Windows Script Host
2,0才允许仅使用 C L S I D来创建对象实例。
在注册和取消注册时执行代码如果需要,组件具有在注册或取消注册时运行预定义代码的功能。通常,从 r e g s v r 3 2,e x e
的视角来看,C O M对象的注册是从 C O M对象 D L L中调用一个函数。但是,每个 W S C都通过服务器模块 ( s c r o b j,d l l )注册。一旦调用,它就知道了正在工作的 W S C文件的名称,并且创建
C O M对象的所有注册项。
这个 D L L还在 < r e g i s t r a t i o n >标记中查找两个函数中的一个。根据组件是在注册还是在取消注册,它们分别是 R e g i s t e r ( )和 U n r e g i s t e r ( ):
500计计 ASP 3 高级编程 下载定义这些函数取决于是否需要。在注册组件前没有必要声明其中任何一个。当然,可以使用这两个函数去做更多的事情,而不仅仅是显示一个对话框。举个例子,可以动态生成组件类型库。
2,<public>
< p u b l i c >标记定义了组件的公共编程接口。换句话说,定义了组件提供的并且在客户端可以调用的方法、属性和事件。其语法相当直接明了:
其中,n a m e属性定义了每个条目的公共名称。在上面的代码中,属性是通过变量
M y P r o p e r t y进行描述的,而方法体全部在一个名为 M y M e t h o d的函数中。二者都定义在 W S C的
< s c r i p t >标记中。下面是更多的关于这方面的内容。
(1) 内部名称对于方法和属性同样也可以使用一个内部名称。这通过 i n t e r n a l n a m e属性来赋值。内部名称的基本用途是在 W S C文件中引用方法或属性。
在这种情况下,M y P r o p e r t y的属性通过变量对 m _ M y P r o p e r t y来实现。同时,当客户调用
M y M e t h o d方法时,实际调用的是 D o M y M e t h o d函数。
(2) 指定参数一个方法根据需要可以有任意多个参数。这里,n a m e属性指示了形参名称。同样,事件也可以有任意个参数,尽管一些老的文件没有提到这一点。
(3) 只读和只写属性第 1 6章 A S P脚本组件 计计 501下载客户端不能通过浏览器打开 W S C中使用的属性,这些属性也不能读写。在大多情况下,
会发现组件同客户的交互需要多一点控制。假设组件显示当前会话个数,这个值应是只读的。
如果客户能修改他,则很快就会出现错误。
每个 < p r o p e r t y >标记有两个子标记,< g e t / >和 < p u t / >。两者分别定义了读和写属性值的方式。当需要读写属性内容时,执行二个过程中相应的一个。它们都有一个默认的名字,分别是 g e t _和 p u t _,加上属性的公共名称,但是二者都可通过使用前面讲到的 i n t e r a l n a m e属性进行更改。如果省略 < g e t >标记,可自动使此属性只写。同理,省略 < p u t >可以使属性只读。
(4) 激发事件在 W S C中激发一个事件必须调用一个 W S C的全局函数 f i r e E v e n t。这可以触发一个由其第一个参数指定的事件,另外,还可以增加任意个参数。
3,<implements>
如果仅需要 W S C提供方法、属性和事件,则不需考虑 < i m p l e m e n t s >标记。这个标记主要用于定义你的 W S C支持的 C O M接口。缺省情况下,W S C自动支持自动化 ( A u t o m a t i o n )和事件处理接口。更准确地说,当插入 < p u b l i c >标记时,将自动要求支持这些接口。
一个用脚本语言编写的 C O M对象并不能实现所有可能的 C O M接口。尽管这在 C + +和
D e l p h i中可以非常轻易地实现,在 Visual Basic中将会稍微复杂一些,而用脚本代码几乎是无法实现的。为了围绕这个方面展开工作,W S C依赖于名为“接口处理器” (interface handlers,
I H )的专用二进制模块。接口处理器由前面提及的 s c r o b j,d l l管理。
接口处理器接口处理器 ( I H )是一种对任何附加的非自动化 C O M接口提供支持的二进制模块。其结构如图 1 6 - 2所示。
图 16-2 接口处理器结构图
I H主要是作为 W S C脚本代码和客户应用程序之间的一种中介,向客户提供给定接口的标准的 C O M布局。当客户调用接口的方法时,I H检索并执行脚本代码以实现其功能。
一旦声明 < p u b l i c >标记,s c r o b j,d l l将自动为自动化和事件加载 I H。如果需要支持附加的接口,可以在 < i m p l e m e n t s >中显式请求。也就是说,< i m p l e m e n t s >标记是一种 W S C与特定的处理器之间的联系方式。其语法如下:
502计计 ASP 3 高级编程 下载客 户标准 COM接口
(自动化、事件) ASP
WSC
Behaviour Scrobj.ddl
t y p e属性定义 I H的名称,而 id 是处理器自身实际使用的 I D。 在大多情况下可以省略 i d属性。
在本章稍后将讨论 W S C结构的内部细节。
4,<resource>
使用这个标记可以隔离 W S C文件代码中所有是常量并且不想在脚本中进行硬编码的元素
(字符串和数字 )。每种资源通过 I D定义:
可以使用 I D在 W S C文件代码中检索信息。 I D必须传递到全局函数 g e t R e s o u r c e ( )以获得存储的数据:
上面的代码显示了另外一个标记,< c o m m e n t >。顾名思义,置于这个标记中的所有文本将被分析器忽略,可以用做源代码的注释。
< r e s o u r c e >标记的典型用途是定义脚本中的常量。尽管 < r e s o u r c e >更为标准且语言上更为中性一些,但从功能上讲,使用 < r e s o u r c e >标记同在脚本中声明一组常量并没有区别。
16.3.2 脚本层所有与 W S C方法、属性以及辅助函数相关的函数都必须包含于 < s c r i p t >标记中。其语法与
H T M L的 < s c r i p t >标记十分相似,但不同的是前者仅需要 l a n g u a g e属性来进行修饰。
只要安装合适的解释器,就可以在脚本组件中使用任何语言。微软仅仅提供了基于
V B S c r i p t和 J S c r i p t的两个解释器。但是第三方厂商已经开发了用于 P e r l和其他语言的 Wi n d o w s
脚本兼容解释器。
X M L适应性正如前面提到的,一个 W S C文件基本上就是一个 X M L文件,遵循 XML 1.0规范。到此为止,实现它仍有两件工作要做。第一件是在文件顶部加入下面一行代码以声明它为 X M L。
但是,当这样做了以后,必须将 < s c r i p t >标签中的所有内容包含进来。为了防止 X M L解释器对特殊字符的混淆,例如,<”或,&”,可使用 C D ATA分界符。
第 1 6章 A S P脚本组件 计计 503下载
16.3.3 运行期层为了创建一个 W S C实例,通常需要使用一个类似 V B S c r i p t的 C r e a t e O b j e c t的函数并以
P r o g I D作为其第一个参数 (另外组件所安装的服务器的名称是可选的第二个参数 )。一旦调用,
V B S c r i p t引擎试图定位实现组件的 D L L的名称,进行下列步骤:
在注册表中搜寻 P r o g I D。
从 P r o g I D获得组件的 C L S I D。
在注册表中搜寻 C L S I D。
读取可执行文件的名称。
对于 W S C而言,其服务器模块总是位于 Wi n d o w s目录下的 s c r o b j,d l l文件。 V B S c r i p t创建对象实例,s c r o b j,d l l将接受代表此对象的 C L S I D。现在,s c r o b j,d l l的核心代码将使用这个
C L S I D在注册表中搜寻名为 S c r i p t l e t U R L的 W S C键。这个键指向提供公共方法的运行期代码的
W S C文件。
W S C的运行期 D L L为一个虚拟对象创建一个实例,该实例实现 W S C定义的接口并将其返回给调用者。之后,当 V B S c r i p t代码执行一个方法时,将调用这个虚拟对象。由这个虚拟对象从 W S C源代码中提取正确的代码段,并交由 V B S c r i p t或 J S c r i p t解释器执行。
改变后不用再注册当向外界提供 C O M的接口后,不会因为添加或删除其属性和方法而发生改变,也不必在脚本代码中对发生改变的组件进行重新注册。同理,也不必在服务器脚本组件发生改变后停止并重新启动服务器。对于代码执行,所有需要处理的事情都发生在运行期。
16.4 可用的接口前面曾提到使用脚本语言编写 C O M对象存在着种种问题。下面,将通过了解 W S C的底层运行进行期机制找到以上问题的答案。客户端程序将始终需要获得标准的 C O M接口,但在
C O M的标准接口背后,运行期引擎事实上是运行从分离的 W S C文件中读取的脚本代码。
很清楚,这样做的结果就是必须为通过脚本代码提供的接口提供一个二进制的中介。这个中介就是前面所说的接口处理器。换句话说,可以通过脚本代码实现一些 C O M接口,同时必须相应的处理器。
微软给出的有关这方面的技术指导,指出了仅有的几个可用的接口处理器:
自动化处理器。
事件处理器。
ASP处理器。
IE 5.0行为处理器。
所有这些处理器都在 s c r o b j,d l l内实现,不需其他文件支持。如果使用了 < p u b l i c >标记,前面两个处理器会被自动激活。后两个则需要定义一个 < i m p l e m e n t s >标记。
504计计 ASP 3 高级编程 下载在同一个 W S C文件中同时使用 < p u b l i c >和 < i m p e m e n t s >标记不会出现问题。自动化处理器和事件处理器可以同 A S P处理器或行为处理器很好地共存。但是,应当避免将 A S P组件同行为处理器置于同一个 W S C组件中,因为二者将会相互冲突。可以编写两个分离的 W S C文件,或者创建一个包 ( P a c k a g e )。
包可以在 WSC XML模式的根上找到 < p a c k a g e >标记。 < c o m p o n e n t >标记事实上是 < p a c k a g e >
标记的一个子标记。 < p a c k a g e >标记作为单个文件中的多组件的“容器” 。唯一的附加条件是,
每个包中的组件必须指定一个唯一的 I D号。例如:
16.5 编写一个 A S P脚本组件实际上,使用脚本语言编写的 A S P组件只是 Wi n d o w s脚本组件 ( W S C )的一个特定类型。唯一的不同是它们还具有与 A S P内建对象的接口,如 R e s p o n s e,R e q u e s t,S e s s i o n等等。
当然,只有在 I I S或 P W S地址空间中创建的对象才是可用的。为了在 V B S c r i p t代码中安全地调用这些对象,需要对执行 W S C < s c r i p t >代码的环境添加对它们的引用。 A S P接口处理器正第 1 6章 A S P脚本组件 计计 505下载是用来完成这项工作的。
只有在特定的 W S C文件中通过 < i m p l e m e n t s >标记请求 A S P支持时,处理器才被激活。在最后一节中将给出其示例。
16.5.1 AspTa b l e组件现在,看看如何编写一个不同寻常的组件 A s p Ta b l e。之所以把它叫作 A s p Ta b l e组件是因为它只是对 H T M L < t a b l e >标签的一个包装。
通常,使用表格显示已经或尚未进行附加处理的数据库记录。例如,姓和名常被合并,
并且放置在数据库的同一栏中。
A s p Ta b l e组件有一些有用的特征:
为表添加列,从一个 A D O记录集中获取信息。
定义一个动态表达式来合并几个字段,并通过一个链接或动作将它们关联起来。
为某些栏指定风格和装饰性文本 (如标题、脚注等 )。
在此组件中定义的公共方法如表 1 6 - 1所示。
表 16-1 AspTa b l e组件定义的公共方法及说明方 法 说 明
S e t R s (a d o R S) 用一个 A D O记录集填充表
A d d C o l u m n (heading,expr,style) 在表中增加一列,指定栏标题,C S S风格和每行的计算表达式
G e t Te x t ( ) 在页面中产生并插入用于表的 H T M L代码按照组件的工作方式,这三个方法必须按一定的顺序进行调用才能正常工作。所以,在从记录集中生成 H T M L表格之前,需要先完成以下工作:使用 S e t R s方法使 A D O记录集作为数据源工作;使用 A d d C o l u m n方法添加任意多个所需要的列;最后调用组件的 R e s p o n s e,Wr i t e方法,将由 G e t Te x t方法生成的 H T M L文本写到输出流。
A s p Ta b l e组件还定义了如表 1 6 - 2所示的一些公共属性。
表 16-2 AspTa b l e组件定义的公共属性及说明属 性 说 明
Ta b l e S t y l e 用于整个表的 C C S风格的类名
H e a d e r S t y l e 用于表中所有列标题的 C C S风格的类名
Ti t l e 显示在表顶部的 H T M L文本
F o o t n o t e 显示在表底部的 H T M L文本
C o l u m n C o u n t 返回当前的栏数,只读这些组件使你能够在表中显示信息,如图 1 6 - 3所示。
比起编写 H T M L来生成表格,使用这个组件有不可比拟的便捷性,而且使用组件更利于持久性和易读性。产生图 1 6 - 3的程序代码如下:
506计计 ASP 3 高级编程 下载图 16-3 运行 A s p Ta b l e组件时的界面 1
上面的代码比原始的 H T M L代码更好。下面来分析组件的代码。
下面代码显示了 A s p Ta b l e对象的元数据。
请注意,几乎所有的属性都是使用内部名称 (事实上是个人喜好问题 ),并没有使用由 g e t
和 p u t方法组成的过滤器。仅有 C o l u m n C o u n t属性具有的一个 < g e t >标记,因为需要它是只读的。
第 1 6章 A S P脚本组件 计计 507下载
1,AspTa b l e的脚本代码
A s p Ta b l e对象的核心是 G e t Te x t方法,这个方法可以从其他方法 (如列信息、记录集、风格等 )中采集数据,并利用 < TA B L E >标记将其组织起来。在深入研究这个方法之前,先来看看一些初级的方法,其中包括前面提到的 S e t R s和 A d d C o l u m n方法。
请注意任何 A D O记录集都是可用的。需要记住的是,由 D B M S (如 SQL Server)创建的记录集和由定制的 OLE DB数据提供者生成的记录集以及其他任何不依赖于数据源而创建的记录集之间没有任何区别。这意味着可以通过使用组件来修改任何数据。
2,创建表
508计计 ASP 3 高级编程 下载
G e t Te x t功能执行一个非常简单的算法,通过链接记录集中的行创建一个长字符串。这种方法和组件的真正强大之处是,可计算表达式而不是字段的内容。换句话说,不仅可以将记录集字段值赋给列,还可以赋给列一个字符串表达式,例如链接两个或更多的字段。
这种组件的版本不接受表达式中的代码,但可接受一些宏,它与 C / C + +中的 s p r i n t f相似。
在 V B S c r i p t中,它可被看成特殊形式的 R e p l a c e。
第 1 6章 A S P脚本组件 计计 509下载辅助函数 E x p a n d S t r i n g给所用的列字符串表达式赋值。它考虑字段名并且扩展开那些封闭在,%”内的前缀为,&”的字符串:
除字段名外,另外两个宏可以使用,即 _ R E C O N _和 _ R E C C O U N T _。前者返回当前的记录号。后者返回显示的记录的总数。
510计计 ASP 3 高级编程 下载
a s p t a b l e,W S C组件和代码中的其余支持资料可以从 Wrox 的 We b站点下载。
现在,还需做的是对这个组件进行注册。可右击 Windows Explorer中 W S C文件,选择快捷菜单中的 R e g i s t e r。然后就可以从 A S P页中调用这个组件了。如果注册没有问题,就可以用这个组件来开发页面。
16.5.2 使用 A s p Ta b l e对象下列页面用 A s p Ta b l e对象显示 c o n t a c t s数据库中的一些名称。可从本书的下载代码中找到这个样式表。
这里所用的数据库为本书下载代码的一部分,还应创建一个称为,C o n t a c t s”的系统 D S N
来指向它。
第 1 6章 A S P脚本组件 计计 511下载通过典型的 A D O调用得到记录集,然后在表中增加四列。如果 A d d C o l u m n表达式参数包含一个单词,它被认为是字段名。这意味,e -
m a i l 字 段 可 通 过 E M A I L A D D R E S S
或 % & E M A I L A D D R E S S %显示。结果如图 1 6 - 4
所示。
第二列链接了每个联系人的姓和名,使用了不同的格式化风格,字符表达式如下所示。
要改变列的表示方式或列的数目,可做如下改变:
代码运行的结果如图 1 6 - 5所示。
图 16-5 运行 A s p Ta b l e组件时的界面 3
在上面的表中增加了称为 K e y w o r d的一列,并且已将 e - m a i l地址转换为超级链接。
512计计 ASP 3 高级编程 下载图 16-4 运行 A s p Ta b l e组件时的界面 2
16.6 ASP脚本组件的特点我们应该从正反两方面考虑在工作中使用 A S P脚本组件的必要性。与编译的组件比较,
A S P脚本组件有一个明显的特点,W S C脚本文件可在任何时候进行编辑,在下一次执行时,
组件中的变化可自动反映出来。不需要重新编译,不需重新启动服务器释放现有组件的引用,
也不需要重新注册。并且,如果组件工作状态良好,可选用合适的语言,用已证明可靠的代码和 /或算法创建一个编译版本,这同样适用于任何可转换组件。
A S P脚本组件可适应 C O M +。事实上,与其他 A S P内置对象一样,这种组件可访问 O b j e c t C o n t e x t对象。因此,如果需要,可在任何时候使用 S e t A b o r t和 S e t C o m p l e t e。
脚本组件可用标准的 C O M接口对现有的业务对象 (组件 )进行包装,即使它们是用 P e r l编写的也可以进行包装。在包装过程中,不必知道如何用 P e r l编写,也不必了解相关知识。 C O M
的语言中性特征使得互操作性更为容易。
代码的组件化不仅改善了 We b网站的性能,而且还可通过重新使用通用代码块帮助设计和维护网站。
启用 W S C的页面优于利用服务器端包含 ( S e r v e r-Side Include,S S I )文件的页面。虽然它们做的事情相同,但 A S P脚本组件可根据运行期条件或输入参数动态地创建所需要的对象。 S S I
不允许动态选择,仅允许导入名称在页面的源代码中硬编码的文件。
当然,A S P脚本组件也存在一些不足:
解释组件不具备编译组件的性能,因此 A S P脚本组件的性能不一定是最优的。但性能不是使用它们的理由。
A S P脚本组件不能访问完整的 Win32 API,完成一个系统级的任务需要特定的 C O M自动化对象。而且,脚本语言与 C + +相比,甚至与 V B A相比还不是一种非常成熟的语言。
16.6.1 选择正确的工具下面介绍创建 A S P组件时选择正确工具的快捷方法。
要开发关键的和真正需要服务器性能最高的实时组件,应使用 Visual C++。
因为服务器端组件大多执行一些数据访问类的任务,所以考虑使用 C + +和原始的 OLE DB
调用以获得最大的性能。 Visual C++,A LT模板和 OLE DB接口的组合或许对性能的提高是最有效的。本书的下一章将对用 C + +开发组件做更多的描述。
Visual Basic也是开发组件的强大工具。如果开发的组件不是关键性的,可以用 Vi s u a l
B a s i c。除了同样具有编译代码、完全 Wi n 3 2访问和组件化外,Visual Basic比 Visual C++容易。
WSC 可使页面的原始代码组件化,通过 C O M创建脚本对象将增加一些额外工作量,但灵活性和可重用性较好,并且可减少维护工作量。
16.6.2 脚本组件与 V B S c r i p t类的比较如果打算在 A S P组件中使用 VBScript 5.0,可以考虑使用 VBScript 类来替代脚本组件。
创建 V B S c r i p t类比创建 Wi n d o w s脚本组件用的时间少一些,因为与 C r e a t e O b j e c t不同,
N e w不需要通过 C O M引擎和注册表对装载的文件定位。两者编程能力几乎相同,但使用 W S C
第 1 6章 A S P脚本组件 计计 513下载可利用不同脚本语言的优点。
16.7 小结本章分析了 Wi n d o w s脚本组件 ( W S C )技术,A S P脚本组件是它的特例。用脚本语言编写
C O M对象并不是难以实现的,事实上,这具有许多优点。但是本章内容并不是对每种情况都适合,所以不能解决实际碰到的所有问题。
本章内容重新归纳如下:
WSC的结构和接口处理器的作用。
页面脚本代码中 A S P内置对象的映射。
客户和 A S P脚本组件的交互。
用于 A S P页面的一个完整的 W S C例子。
ASP脚本对象的优缺点。
下一章将介绍如何使用 Visual C++编写功能强大的组件。
514计计 ASP 3 高级编程 下载