下载第 6章 活动服务器组件在前几章中,我们已经研究了两类不同的对象:一类是 A S P对象模型的内置部分,另一类是脚本运行期库提供的对象。本章将介绍第三类能用于 A S P的对象,取名为活动服务器组件 (或者就称为服务器组件 )。
这些组件在很多场合下就如同在浏览器里或在像 Visual Basic编程环境中用于客户端脚本中的传统 ActiveX 控件一样,但是这些组件可在服务器上运行,而不是一个只能运行在客户机上的对象。
现在的问题是:这些组件来自哪里?其中一部分是由常规的 A S P / I I S安装程序提供的,而另一部分可以从 We b上免费或有偿获得。本章讨论 A S P的各种组件的主要用途,然后介绍可得到的其他组件的几个范例。一旦感觉到使用这些活动服务器组件得心应手,你就会毫不费力将其他供应商的产品嵌入到自己的 A S P页面中。本章后面有一个第三方组件的列表,本书后面还将介绍如何创建自己的组件。
还有一些用于 A S P的组件,但本章不准备讨论。动态 We b网站技术的基本用途之一是发布直接从数据库管理系统和其他类型的数据存储获得的信息,这一用途和从数据库或其他数据存储中收集数据和存入数据的需求,促使程序员开发服务器端编程。为了使用 A S P完成这些任务,我们可以充分利用称为 A c t i v e X数据对象 (ActiveX Data Objects,A D O )库的组件集。由于它涉及的内容很多,很难在本章中阐述清楚,还要考虑的其他的组件,本书从第 8章开始讲述相关的内容。
本章要讨论的内容有:
服务器组件与在 A S P中使用的其他对象的区别。
简要说明如何实例化对象,并得到服务器组件的引用。
ASP 3.0和 I I S提供的可安装组件,例如 AD Rotator,Content Linking,Page Counter和
To o l s等组件。
一些第三方提供的组件。
6.1 脚本对象与服务器组件的比较前一章已说明了各种脚本对象,这些对象对于 A S P / I I S 来说都是从脚本运行期库
( s c r r u n,d l l )中得到的,重要的是不要把这些对象与服务器组件 (即本章的主题 )混淆一起。
服务器组件通常在其自己的 D L L或可执行文件中实现,例如本章将要讨论的,C o n t e n t
L i n k i n g”组件,就是由 n e x t l i n k,d l l实现的。一旦在服务器安装和注册这个 D L L文件,那么其提供的对象就可以在 A S P所支持的任何脚本语言中使用。组件与系统环境的关系如图 6 - 1所示。
大多数 A S P / I I S标准组件针对的是特定任务,也就是要在 We b网站或局域网上完成的任务,
当然,最终想借助 A S P达到的任务必须依赖于要想发布的信息和网站的目标。使用预装组件可以提供一个良好的开端。
图 6-1 组件与系统环境的关系使用服务器组件前一章已经介绍了对象和组件在页面中通用的实例化方法,使用服务器组件和使用脚本运行期库对象的方法完全一致,唯一的区别是,不像脚本对象,服务器组件通常作为单独的
D L L文件实现,而且可能要求在使用前先运行一个安装程序,或者手工注册该组件 (如果这些组件在 A S P缺省安装时未注册 )。
1,CreateObject方法一般说来,可以在一个 A S P页面中使用 A S P内置的 S e r v e r对象的 C r e a t e O b j e c t方法创建一个对象,例如:
或:
这样就在变量 o b j T h i s中创建了该对象的引用,然后可以在脚本中使用该对象;换句话说,
可以在代码中根据需要控制其属性及调用其方法。
2,使用 < O B J E C T >元素同样可以使用常规的 < O B J E C T >元素创建一个对象,该方法同样适用于在 We b浏览器页面中创建对象。 A S P支持 H T M L < O B J E C T >元素的特殊实现,而且我可以使用这一方法在页面中放置一个对象。要在普通的,a s p文件中定义一个组件或脚本对象的实例,使用下面语句:
另一方面,可以使用对象的 C L A S S I D取代“友好名”或 P R O G I D,
我们使用 S C O P E属性来设定对象的范围,选项是,S E S S I O N”,,A P P L I C AT I O N”和
,PA G E” 。如果在普通的,a s p文件中使用 < O B J E C T >元素,那么必须同时使用,PA G E”属性,
并忽略 S C O P E属性,因为创建的对象只能在它被实例化的页面中使用。如果在 g l o b a l,a s p文件中使用 < O B J E C T >元素,则所创建的对象可在当前会话或整个应用程序中使用,因此 S C O P E
属性可设置为,S E S S I O N”和,A P P L I C AT I O N” 。
170计计 ASP 3 高级编程 下载
ASP环境脚本 DLL
VBScript DLL
JScript DLL
其他语言服务器组件 DLL
其他系统或可加入的 DLL
3,检测对象实例的存在经常出现的错误是企图创建一个未安装 (或未注册 )的对象的实例,或者在 C r e a t e O b j e c t方法或 < O B J E C T >元素中使用错误的对象 P r o g I D。缺省状态下,A S P会出现错误并停止页面的执行。
给页面添加一些程序代码,在访问对象之前进行检测是必要的。在 V B S c r i p t中,可以做到这一点,方法是:关闭缺省的错误处理,然后使用 I s O b j e c t函数查看对象变量是否真的引用了一个对象。
在 J S c r i p t语言中,可以使用 JScript 5.0的脚本引擎中新的错误处理特性,这在第 1章中介绍过。
6.2 ASP/IIS可安装组件
A S P / I I S的标准安装包括一系列服务器组件,这些组件在 I I S文档中被描述为可安装组件
(installable component),尽管缺省状态下它们是完全安装。但也有可能这个名称仅仅是沿用
A S P的前几个版本中的名称。在以前版本中,这些组件需要人工安装。现在,如果要给它们起个合适的名称,可称为“可实例化的组件” 。
需要注意的是,在第 8章将介绍一个特定的可安装组件,即 A D O组件。后面的章节中使用的其他组件都是作为特定的服务或服务器应用程序的一部分而安装的。例如协作数据对象第 6章 活动服务器组件 计计 171下载
(Collaborative Data Objects,简称 C D O和 C D O N T S )组件,用于邮件服务器和电子邮件消息。
本章的其余部分将讨论,如何使用其他通用性较强的组件为 We b网站或 I n t r a n e t提供增强功能。
在 Windows 2000中的 Wi n N T \ S y s t e m 3 2 \ i n t e s r v \目录下可找到这些 A S P可安装组件,该目录也放置一些组件要求的配置文件。下面按字母顺序列出了一些组件。
Ad Rotator 组件用于控制可点击图像的出现,如广告或标题。使用存储在配置文件中的信息,Ad Rotator能够依据配置文件规定的比率显示不同的图像,同时也具备把可点击的广告重新定位到相应的 U R L以及记录图像点击次数的特性。
Browser Capabilities组件使用 U s e r A g e n t字符串,该字符串由浏览器发往服务器,用来识别相应的浏览器。它提供了反映特定浏览器功能的一系列属性,例如是否支持脚本、
c o o k i e或 J a v a小程序。
Content Linking组件用于提供一系列方便导航的页面,这些页面可被改变或更新而不必编辑各个页面。该组件采用一个文本文件 (含有页面 U R L和显示顺序 ),使创建按指定顺序链接起来的一些页面很容易。
Content Rotator组件采用一种配置文件来指定插入到其他页面中的 H T M L、文本或程序代码,根据配置文件指定的情况,显示内容的任何部分。
C o u n t e r s组件能够创建、递增和永久地存储各个在脚本代码中使用的整数计数器的数值。
Logging Utility组件提供对 We b服务器日志文件的访问,并且允许在一个 A S P页面内读取和更新这些数据。这是 Windows 2000中随 IIS 5.0和 ASP 3.0新增的特性。
M y I n f o组件为可在整个网站内访问的名称 /值对的存储提供了一个存储空间,这些数据在服务器上以 X M L格式的文本文件存储 (不同于应用程序作用域,这些数据在 We b网站范围之外仍然保留 )。
Page Counter组件记录访问一个页面的次数,可以用于跟踪页面的点击次数。
Permission Checker组件有助于防止当一个用户试图访问没有正确的权限设置的资源时引起的脚本错误。
To o l s组件提供了一些在页面中可以采用的方法,这些方法用来检验一个文件是否存在、
处理 H T M L窗体,生成一个随机整数。 另外还有一些用在 M a c i n t o s h苹果计算机上的方法,
可以检查是否存在某个服务器插件程序,检查当前用户是否为网站拥有者。
另外一个由 I I S / A S P提供的组件,即 S t a t u s组件,只能用于 M a c i n t o s h计算机的个人 W e b 服 务 器 上 。 本 书 没 有涉 及 该 组 件,若 要 详 细 了 解 该 组 件,可 通 过
H T T P,/ / l o c a l h o s t / i i s / h t m / a s p / c o m p 1 q t 0,h t m查阅 A S P / I I S提供的 IIS 5.0文档。
6.2.1 使用示例页面本书已经提供了一系列的示例页面来说明所有这些组件的用法。
可以从 Wrox We b网站上下载这些实例页面,并在自己的计算机上运行。在下载的文件的 C h a p t e r 0 6子目录中会找到本章所用的程序代码。
在运行示例页面之前,确保 M y I n f o和 C o u n t e r组件的“全局”实例化代码已包含在缺省
We b站点的 g l o b a l,a s a文件中。在示例文件中提供了 g l o b a l,a s a文件中所需要的代码,可以将这些代码加到现有的 g l o b a l,a s a文件中,不需要更换整个文件。
172计计 ASP 3 高级编程 下载示例文件的主菜单页面 ( D e f a u l t,a s p )使用 Content Linking组件创建到每一个页面示例的链接。因此,我们将首先研究这个组件,也涉及了 Ad Rotator和 C o u n t e r s组件的有关问题。
6.2.2 Content Linking组件
Content Linking组件对网站是非常有用的工具,它提供了内容页面,或者包含对同一站点上其他页面的链接列表的页面。它自动把当前显示页面的 U R L与存储在服务器里的文本文件的页面列表匹配起来,并且能允许用户通过页面列表按正反顺序进行浏览。也就是说,即使访问者已经在内容页面中点击了一个链接并且正在查看列表中的某一个页面,该组件仍然会辨认出所访问的页面在列表中的位置。
因为所有详细资料均在一个文本文件中,维护网站以及页面间的链接仅仅需要编辑这个文本文件。例如可以通过在内容链接列表文件中重新排列页面的顺序,来改变它们的显示顺序。
1,内容链接列表文件内容链接列表文件包括一个简单的按显示顺序排列的页面 U R L列表,同时也提供了相应的描述,用于在内容页面中显示链接文本。如果需要,还可以增加对每个页面的注释,注释可以帮助识别链接,但对访问者来说注释是不可见的。
列表文件对于每个页面包含一个文本行。每一行由 U R L、描述和注释所组成,各部分由
Ta b字符 (不是空格,否则文件将不能工作 )分隔,最后用回车结束。例如:
请注意目标 U R L必须由一个相对的虚拟或物理的路径来说明,诸如 f o r u m \ e n t e r,h t m。 U R L
不能使用,h t t p:,,,/ /”或者,\ \”作为开头,如果要创建上述这样含有绝对 U R L的菜单,可以使用 A S P建立一个重新定向页面,而且在内容链接列表文件中对其进行指定,例如,建立一个名为 r e d i r e c t,a s p的页面,包含如下代码:
可以在内容链接列表文件中按下述方式使用 r e d i r e c t,a s p文件:
第 6章 活动服务器组件 计计 173下载
2,Content Linking组件的成员
Content Linking组件提供了八种方法,如表 6 - 1所示。这些方法能够检索来自内容链接列表文件的条目,既能相对于当前页面检索条目,也可以使用索引号检索绝对条目。第一个条目的索引号是 1。
表 6-1 Content Linking组件的方法及说明方 法 说 明
G e t L i s t C o u n t (l i n k s _ f i l e) 返回文件 l i n k s _ f i l e中条目的数量
G e t L i s t I n d e x (l i n k s _ f i l e) 返回文件 l i n k s _ f i l e中当前页面的索引号
G e t N e x t U R L (l i n k s _ f i l e) 返回文件 l i n k s _ f i l e中下个页面的 U R L
G e t N e x t D e s c r i p t i o n (l i n k s _ f i l e) 返回文件 l i n k s _ f i l e中下个页面的描述
G e t P r e v i o u s U R L (l i n k s _ f i l e) 返回文件 l i n k s _ f i l e中前一个页面的 U R L
G e t P r e v i o u s D e s c r i p t i o n (l i n k s _ f i l e) 返回文件 l i n k s _ f i l e中前一个页面的描述
G e t N t h U R L (links_file,n) 返回文件 l i n k s _ f i l e中第 n个页面的 U R L
G e t N t h D e s c r i p t i o n (links_file,n) 返回文件 l i n k s _ f i l e中第 n个页面的描述如果当前页面不在内容链接列表文件中,则:
GetListIndex返回 0。
GetNextURL和 G e t N e x t D e s c r i p t i o n返回列表文件中最后一个页面的 U R L和描述。
GetPreviousURL和 G e t P r e v i o u s D e s c r i p t i o n返回列表文件中第一个页面的 U R L和描述。
3,使用 Content Linking组件一旦创建了自己的内容链接文件,就可以把该组件添加到页面中。这里有一个典型的示例,它遍历内容链接文件中的所有条目,并且创建一个页面列表 (以超链接表示页面 )。
这段代码首先创建了一个 Content Linking对象。在普通的 < U L >和 < / U L >标记之间,使用
Content Linking对象的 G e t L i s t C o u n t方法查找在内容链接列表文件有多少条目。然后再遍历这些条目,对于每一个条目在页面中放入一个 < L I >标记,后面跟着一个 < A >标记。 H R E F属性的值从列表文件中使用 G e t N t h U R L方法检索得到,用作链接文本的描述使用 G e t N t h D e s c r i p t i o n
方法得到。
注意,内容列表文件和使用它的 A S P页面应处在同一文件夹中。否则,应提供一个相对物理路径或一个完整的虚拟路径,如下所示:
174计计 ASP 3 高级编程 下载
(1) 创建一个内容页面我们已使用 Content Linking组件为本章提供的示例创建了菜单页面。 C h a p t e r 0 6文件夹中的页面 D e f a u l t,h t m采用上述代码创建菜单,如图 6 - 2所示。
图 6-2 使用 Content Linking组件创建的菜单页面可以看到内容链接列表文件的内容显示在链接的下面,我们使用 F i l e S y s t e m O b j e c t对象完成这一工作。
如果你编辑了 c o n t l i n k,t x t文件,下次再次调用这个页面时,会看到菜单的条目发生了变化。
注意文件中的最后三个条目,这三个条目使用前面介绍的 r e d i r e c t,a s p技术,把绝对 (而不是相对 )的 U R L插入到列表中。
(2) 浏览这些页面创建一个 Content Linking组件实例并且使用它的一个方法时,将把当前页面的 U R L与指定的内容链接列表文件中的条目相匹配。 不仅能用该组件创建一个内容列表 (就像刚看到的那样 ),
而且当在浏览器上打开其中一个页面时,可以用该组件对列表中的各个页面进行导航。
这意味着可以用超链接或按钮从这些页面中的一个移到另一个。例如,可以给页面添加第 6章 活动服务器组件 计计 175下载
N e x t和 B a c k按钮,通过使用 G e t N e x t U R L和 G e t P r e v i o u s U R L方法能知道列表中的哪一个页面是前一个,哪一个页面是下一个。另一方面,能用 G e t N t h U R L方法跳到列表中的任何页面,用
G e t L i s t I n d e x方法能知道当前页面在列表中的位置。
下面是一段给页面添加 N e x t和 B a c k按钮的代码,我们要做的只是把这段程序放在内容链接文件所列出的每一页中,或者用 SSI 的 # i n c l u d e指令将它插入其中。
第一步是创建 Content Linking组件,然后把列表文件名存入一个变量中,以便后面在创建页面里的客户端 J S c r i p t代码时能够使用这个列表文件。另外这样做也便于页面的维护,因为如果想使用一个不同文件名仅需在一个地方改变就可以了。
现在让我们了解一下在链接列表中所处的位置。 G e t L i s t I n d e x方法提供当前页面的索引号,
从列表中的第一页开始。如果当前页面的索引号比 1大,那么可以后退,所以我们在页面中创建 B a c k按钮。如果当前页面的索引号比列表中的项数少,创建 N e x t按钮。页面中总是包括一个 H o m e按钮,以便访问者在任何时候都能轻易地返回到内容页面。
如果打开列在主菜单中的页面之一的话,将会看到使用这项技术在每个页面上创建的一系列导航按钮,创建按钮的代码在文件 c o n t l i n k b u t t o n s,i n c中,可用 # i n c l u d e指令将它插入每个页面中。图 6 - 3所示为带有按钮的界面。
在图 6 - 3中有三个按钮,使用 G e t P r e v i o u s D e s c r i p t i o n方法获得上个页面的链接文本,并把这个文本放入 B a c k按钮的 T I T L E属性中,作为弹出的提示。
176计计 ASP 3 高级编程 下载图 6-3 带有按钮的界面
N e x t按钮采用 G e t N e x t D e s c r i p t i o n方法完成类似的工作。
(3) 用 J a v a S c i p t跳转这些导航按钮使用 JavaScript (而不是 V B S c r i p t )装载新页面,这样就能够和大多数现代浏览器兼容。例如 B a c k按钮包含下面的属性:
当页面的 H T M L版本由 A S P创建时,在 < %,,,% >标记中的表达式用其数值取代,所以发往浏览器的网页看起来如下所示:
为什么选择使用变量来表示内容链接列表文件的名字?其原因是在单个语句中包括一个三层的嵌套引用是非常麻烦的。
注意浏览器的缺省语言是 J a v a S c r i p t (或 I E中的 J S c r i p t ),而不是 V B S c r i p t,通过使用 J a v a S c r i p t,可以避免在 O n C l i c k代码中必须提供 L A N G U A G E参数,同时对非 I E浏览器提供兼容性。
6.2.3 Ad Rotator组件
Ad Rotator组件允许浏览器在引用 A S P页面时每次显示不同的图像,这项技术经常用在显示广告的站点上。每次打开或重新载入页面时,A S P采用“旋转调度文件” (rotator schedule
f i l e )中的信息选择一副图像,并插入网页中。然而 Ad Rotator组件能做更复杂的工作,它可以把图像设置成超级链接而不是一副静止的图像,并能记录用户对每个广告的点击次数。
在本章所介绍的组件中,Ad Rotator组件可能是最难使用的,因为它涉及几个不同的文件。
在查看每个文件之前,图 6 - 4所示的工作过程总览可能有助于了解它们之间的组合方式。
访问者可以浏览页面中由旋转调度文件指定的广告。通常这是个超级连接,并且对其点击会载入一个重定向文件。这是个常规的 A S P页面,能记录用户对文件的操作或点击计数,
然后重新定向到相应的广告主的网站。
第 6章 活动服务器组件 计计 177下载图 6-4 Ad Rotator组件的工作过程总览
1,旋转调度文件
Ad Rotator组件依赖于该文件来指定显示的广告或图像。这个文件包括每个图像文件的名字、显示的尺寸大小以及显示时间的相对百分数。该文件分为两部分,由一个仅含有一个星号 ( * )的行分隔。
文件格式如下:
其中:
U R L是执行重新定向的 A S P文件或程序的虚拟路径及名称。
w i d t h和 h e i g h t定义了页面中广告条的大小 (以像素为单位 ),缺省值为 4 4 0× 6 0。
b o rd e r规定了广告条边界的宽度 (以像素为单位 ),缺省值为 1,无边界时为 0。
第一部分是可选的,设置应用于该文件中所有广告条的缺省值。这给设置所有图像的参数提供了一种方法,边界宽度可以使用 Ad Rotator组件中的 b o r d e r属性来设置。如果忽略了一项或多项此类任选参数,而且没有明确设置对象属性,那么参数就使用其本身的缺省值。如果忽略所有这些参数,仍需包含,*”作为文件的第一行。
第二部分,即,*”后的部分,必须存在于该文件中,它提供了各个广告条的细节。对于每个广告条,下面四个参数要重复使用。这些参数是:
a d U R L,是广告图像文件的虚拟路径和文件名。
a d H o m e U R L,是广告跳转到的 U R L,连字符 ( - )表明该广告条没有链接。
t e x t,浏览器不支持图形文件时显示的文本。
i m p re s s i o n s,是一个整数,指明了此广告条显示的相对时间或时间比率,例如一个文件包含三个广告条,而且它们的 i m p re s s i o n s值分别设置为 4,6和 1 0,那么表明返回的页面中有 2 0 %可能出现第一个广告条,3 0 %出现第二个广告条,5 0 %出现第三个广告条。这
178计计 ASP 3 高级编程 下载访问者加载页面广告
G e t A d v e r t i s m e n t
ASP页点击广告重定向文件 广告主的站点广告图像旋转调度文件没有指明广告条在浏览器中显示的实际时间。注意每一个广告条的实际出现是随机的,
并被修改以达到需要的比率。
下面看一个重新定向文件的例子:
2,Ad Rotator组件的成员
Ad Rotator组件含有一个方法和三个属性,方法如表 6 - 2所示。
表 6-2 Ad Rotator组件的方法及说明方 法 说 明
G e t A d v e r t i s e m e n t (s c h e d u l e _ f i l e) 使用指定的 s c h e d u l e _ f i l e中的信息创建并返回一个字符串,这个字符串含有把下一个合适的图像插入到该页面所需的 H T M L
属性如表 6 - 3所示。
表 6-3 Ad Rotator组件的属性及说明属 性 说 明
B o r d e r 整数型,是指广告条边界的宽度 (以像素为单位 ),若未设定,则采用文件第一部分设定的值
C l i c k a b l e 布尔型,规定广告栏图像文件是否显示为一个超级链接,缺省值为 Tr u e
Ta rg e t F r a m 字符串型,目标框 ( f r a m e )的名字。如果用户点击图像文件的话,这个框用于显示广告主的页面。如果忽略的话,页面装载到当前浏览器的目标框或窗口内,取代含有广告栏图像的页面,这个属性也能设置成一个标准的
H T M L框标识,_ t o p,_ n e w,_ c h i l d,_ s e l f,_ p a r e n t和 _ b l a n k
3,使用 Ad Rotator组件下面的代码说明了 Ad Rotator组件的使用。创建了组件实例之后,设置属性参数并调用
G e t A d v e r t i s e m e n t方法,指定调度文件的相对物理路径。由组件返回的 H T M L代码通过使用
R e s p o n s e,Wr i t e方法插入到页面中。
第 6章 活动服务器组件 计计 179下载
G e t A d v e r t i s e m e n t方法的参数是相对于当前目录或 We b网站根目录的调度文件物理路径和文件名。在上面的代码中,此文件取名为 A d R o t F i l e s,位于包含正在运行的 A S P页面的当前目录下的子目录中。如果这个文件存入 We b网站根目录下的 A d R o t F i l e s子目录,应使用
,\ A d R o t F i l e s \ M y A d F i l e,t x t” 。
调用 G e t A d v e r t i s e m e n t方法时,返回能插入网页中用于创建广告栏的 H T M L代码,对于上例中的旋转调度文件中的第一个广告栏,可以得到下列代码:
可以看到在常规的 < A >标记中放置了图像文件,H R E F属性设置为重定向文件的名称
A d R e d i r e c t,a s p,同时广告主的主页 U R L和所用的图像添加到查询字符串中,因此当用户点击广告栏时,重定向文件将在服务器上载入并运行。
4,重定向文件重定向文件可以是一个 A S P页面、一个 ISAPI DDL或者是一个 C G I应用程序,无论是哪一种,它必须能够接受和辨别广告主的主页 U R L以及图像名参数。它检查这些值并决定下一步该做什么。例如通常会把用户重新定向到与此广告栏有关的 U R L,这一点使用下面的
V B S c r i p t代码很容易实现。
然而,重新定向文件提供给我们的不仅仅是这些。例如可以统计点击每个广告的用户数量,如果根据点击数收取广告费用的话,这将显得尤其有用。也可以用本章后面介绍的
C o u n t e r s组件来完成这项工作。
查询字符串包含图像文件名时,在脚本中也要考虑这一点,如果在调度文件中,同一广告主有三种不同的图像,可以对每个图像单独地跟踪访问次数。
180计计 ASP 3 高级编程 下载
5,一个 Ad Rotater示例页面本章提供的示例文件包括一个 Ad Rotator组件演示程序,它能够从前面见过的 A S P
Installable Components主菜单中打开。页面的上部显示的是一个由名为 a d _ s c h e d u l e,t x t的旋转调度文件定义的广告 (可在本章示例目录下的 Ad RotFiles子目录中找到 a d _ s h e d u l e,t x t ),如图 6 - 5所示。
图 6-5 AD Rotating 页面示例使用的代码前面已经讨论过,这里在调度文件中仅增加了另外一些条目,以便更清楚地显示载入页面时的广告的变化情况。如果点击一个广告,将运行名为 a d _ r e d i r e c t,a s p的重定向文件中的代码,并且相应的广告主的页面在新的窗口里打开。完成该工作的代码和前面见到的相同。
在重定向文件中,可使用计数器 (由 C o u n t e r s组件创建 )实例存储每个广告的点击次数。
此页面的其余部分演示了 C o u n t e r s组件的作用,下面介绍该组件。
第 6章 活动服务器组件 计计 181下载
6.2.4 Counters组件
C o u n t e r s组件能用于创建、存储、递增和检索每个计数器的值。不要把它和本章后面将要介绍的 Page Counter组件混淆,C o u n t e r s组件能用于支持任何种类数据的统计。
一个计数器含有一个整数值,能通过 C o u n t e r s组件的方法进行运算。使用 S e t方法设置计数器的指定值,用 G e t方法检索计数器中的值,使用 I n c r e m e n t方法使计数器的值加 1,使用
R e m o v e方法删除一个计数器。所有的计数器的值存储在一个名为 C o u n t e r s,t x t的文本文件中,
可在 C o u n t e r s,d l l组件所在的目录中找到该文件。
1,Counters组件的成员
C o u n t e r s组件提供了用于维护每个计数器组件中数值的四个方法,如表 6 - 4所示。
表 6-4 Counters组件方法及说明方 法 说 明
G e t (c o u n t e r _ n a m e) 返回指定计数器的当前值,如果此计数器先前没有创建,首先创建并设置成 0,
其返回值为 0
I n c r e m e n t (c o u n t e r- _ n a m e ) 增加指定计数器的当前值,如果此计数器先前没有创建,首先创建并设置为 1
R e m o v e (c o u n t e r _ n a m e) 删除指定的计数器
S e t (counter_name,value) 把指定计数器的值设置成参数 v a l u e提供的整数值,如果此计数器先前没有创建,先创建并设定为指定值
2,使用 C o u n t e r s组件由于 C o u n t e r s,t x t文件仅有一个所有组件实例都能访问的拷贝。因此,应该只创建单个的
C o u n t e r s组件实例,并且使之对 We b网站的所有页面都是可用的,实现这一点的常用方法是在缺省 We b站点根目录下的 g l o b a l,a s a文件中创建一个应用程序范围的实例。
采用下面程序:
可以使用 C o u n t e r s组件对需要完成的任务创建一个新的计数器。在下面的程序中,给出了有三项选择的调查问题,并对每一种选择的回答次数进行了统计,当使用者提交包含三项选择的窗体后,将调入这个页面。假设选项通过点击 S U B M I T按钮的 c n d Ye s,c m d N o和
c m d M a y b e来选择,其对应值分别是“是”,,否”和“可能” 。
如果这是第一次收到一个指定的响应,程序将创建一个新的计数器并自动初始化为 1。
计数器在使用范围上没有限制,因为 C o u n t e r s对象创建在文件 g l o b a l,a s a中,这意味着在虚拟应用程序或 We b网站中创建的任何一个页面中都是可用的,所以这个“调查计数器”可用在应用程序的任何页面上,记住单个的 C o u n t e r s对象能提供所需的许多独立计数器,不需要创建很多 C o u n t e r s对象实例。
182计计 ASP 3 高级编程 下载在前面的 Ad Rotator组件页面示例中,研究了如何使用 C o u n t e r s组件存储每个广告主的点击次数,也可以在页面中使用 C o u n t e r s组件的 G e t方法显示当前值。
每次加载页面时,都自动更新计数器的当前值。然而页面也包含有一些控件能调用 C o u n t e r s
组件的其他两个方法,即删除一个计数器 (相当于将其设置为 0 )和将计数器设置成一个指定数值,
如图 6 - 6所示。
这些控件在一个 < F o r m >上,点击任何一个小的空白按钮时,此窗体便提交给同一个页面,方法与本章中的所有页面所用的几乎一样。下面的程序是为 R e m o v e方法创建控件的 H T M L代码。
当载入页面时,通过检查 R e q u e s t,F o r m集合查看点击的按钮,如果找到了某个按钮,将运行代码的相应部分。在点击 R e m o v e按钮的情况下,相应的代码是:
对于 S e t方法,情况类似,但不仅仅需要从文本框中读取新值,而且在调用 S e t方法之前,
检查文本框中的值是否是有效值。
第 6章 活动服务器组件 计计 183下载图 6-6 Counters组件的使用演示使用页面中的按钮调用 C o u n t e r s对象的方法时,重新载入时会在页面顶端看到一段信息和计数器中的新值,如图 6 - 7所示。
图 6-7 调用 C o u n t e r s对象的方法重新载入页面
6.2.5 Browser Capabilities组件创建各种 We b网页时面临的问题之一是,不仅仅使用 A S P技术创建动态网页,而且能够使用 H T M L元素和其他客户端技术,像 Java Applets,A c t i v e X控件以及最近出现的 H T M L元素。
需要意识到的是,一些访问者若使用了恰好不支持它们的浏览器,那么对于精心编制的网页,
访问者看到的可能是文本、图像的杂乱组合,甚至更糟糕的还有相应工作的脚本程序代码。
这里不讨论应当如何设计支持各种不同浏览器的网页 (如果想了解这方面更多的内容,可以查阅 Alex Homer编写的,Wr o x出版的,Professional ASP Techniques for We b m a s t e r s》一书,书号是 ISN 1-861001-79-7)。然而,确实要引用某个页面时,A S P和 I I S提供的 Browser Capabilities
服务器组件可以用来检测浏览器所支持的相关特征。
用户请求来自服务器的页面时,浏览器传送的 H T T P报头包含了正在使用的浏览器的细节。
在 H T T P - s p e a k (它被称为用户代理字符串 )中,定义了浏览器的名称、版本、操作系统及其兼容性。 Browser Capabilities组件在自己的配置文件中查找这个字符串,并采用许多与浏览器特征等同的特性。因此,在网页运行的任何时候,Browser Capabilities组件能够提供支持或不支持某个特性的细节。
在 ASP 3.0版本中,Browser Capabilities组件增加了一个新特性。在 A S P页面中包含
M E TA D ATA指令,指示组件从浏览器中取出一个 c o o k i e,并把其包含的任意值添加到当前的组件实例中作为新属性。这提供了一种方法,从浏览器收集更多的用户特定的信息,而不仅仅是通常从 b r o w s c a p,i n i文件中得到的浏览器指定的信息。了解了现有的浏览器检测特性如何工作后,再回头介绍新的 M E TA D ATA技术。
1,browscap.ini文件
Browser Capabilities组件使用一个基于服务器的 b r o w s c a p,i n i文本文件,该文本文件必须
184计计 ASP 3 高级编程 下载和 b r o w s c a p,d l l组件文件处于同一目录中。 b r o w s c a p,i n i文件包含大多数关于以前和当前浏览器的信息,并且当浏览器的用户代理字符串与文件中的指定字符串都不匹配时,将使用
b r o w s c a p,i n i文件中的缺省部分。所以添加关于浏览器的新信息或者更新现有的信息,只需编辑 b r o w s c a p,i n i文件。
首先看一下 b r o w s c a p,i n i文件的格式,该文件中的所有条目都是可选的。但包括缺省部分是非常重要的。如果使用的浏览器与 b r o w s c a p,i n i文件中的任何一个都不匹配,并且没有指定缺省浏览器设置,那么所有的特性将设置成,U N K N O W N” 。
下面是 b r o w s c a p,i n i文件的格式:
[ H T T P U s e r A g e n t H e a d e r ]行定义了特定浏览器的起始段,并且 P a r e n t行指明了包含浏览器更多信息的另外一个定义。下面的各行定义了我们想通过 Browser Capabilities组件可获得的属性以及对于该浏览器的相应值。如果浏览器没有列在所属段中,或者尽管列出了但没有列出所有的属性,将采用 D e f a u l t部分所列出的属性和相应的值。
例如,这个文件包含以 [ I E 5,0 ]开头的段,这个段包含有 Internet Explorer 5.0的相应值,这里没有 P a r e n t行,显示的 (除了那些在 D e f a u l t部分定义的 )仅是我们显式定义的属性。
此段描述不和任何一个浏览器相匹配,因为,H T T P U s e r A g e n t H e a d e r行仅仅是 [IE 5.0]。
然而,如果把 [IE 5.0]作为父代,可以对浏览器添加针对 I E 5的定义:
第 6章 活动服务器组件 计计 185下载这样我们把 [IE 5.0]指定为浏览器的父代,则显式提供的属性将代替或增加给父代定义的相应的值,但这里也假定任何其他的属性值没有显式地列在其所属段中。
为了识别非常相似的浏览器版本,在 H T T P U s e r A g e n t H e a d e r行可以使用星号通配符,如:
将和下面的语句相匹配:
然而,只有在浏览器发送的用户代理字符串和不含,*”的 H T T P U s e r A g e n t H e a d e r不完全匹配的情况下,才采用通配符匹配。也只有当这种测试失败了,字符串才会企图和含通配符的 H T T P U s e r A g e n t H e a d e r相匹配,并且使用文件中所找到的确实匹配的第一个值。
最后,加上缺省浏览器段:
这里假设一种最坏的情况,浏览器几乎什么都不支持。应在此基础上定义我们实际想要使用的值。但是,如果定义了一些缺省值为 Tr u e,在一个 U N I X终端上使用纯文本浏览器浏览页面时,可能达不到我们所希望的效果。
维护 b r o w s c a p,i n i文件关闭浏览器时,更新 B r o w s c a p,i n i文件中相应值使其与浏览器的特性保持一致,增加一些旧的或我们关注的专用的值显然也是非常重要的。为了给用户提供方便,通常可从 M i c r o s o f t
We b网站上下载支持 A S P的一个相当全面的 b r o w s c a p,i n i版本或其升级版本,而 CrScape Inc公司提供的 b r o w s c a p,i n i版本经常比 Microsoft We b网站上的版本更新一些。
可以在 h t t p,/ / w w w,c y s c a p e,c o m / b r o w s c a p /上找到最新的 b r o w s c a p,i n i版本,并且订阅一份邮件列表就可自动地收到该文件的最新版本。 C r S c a p e公司也制作一个与 Microsoft Browser
C a p a b i l i t i e s组件竞争的组件,称为 b r o w s e r H a n k (本章后面将介绍 ),新版的 b r o w s c a p,i n i文件也可从 h t t p,/ / w w w,a s p t r a c k e r,c o m上获得。
2,使用 Browser Capabilities组件我们已经掌握了 b r o w s c a p,i n i文件如何提供包含有关特定浏览器信息的可定制属性,下面介绍如何使用 browser Capabilities组件。相对而言,使用 Browser Capabilities组件简单一些,
下面创建组件的一个实例并说明其属性。
186计计 ASP 3 高级编程 下载上面代码程序检查浏览器是否支持 V B S c r i p t并显示一个信息,可以想象这段代码根据浏览器给出的不同响应修改相应的网页,引导用户到不同的页面。
当然,使用 Browser Capabilities组件的属性可做比这更复杂的工作,一个让人喜爱的技术是根据浏览器支持的属性为网站载入不同的索引网页。如果网站有一套使用帧 ( f r a m e )的页面和一套不使用帧的页面,当用户第一次访问网站时,能够检查浏览器显示帧的能力,并将其重新定位到合适的索引网页上。
3,使用 Browser Capabilities的 c o o k i e特性新版 Browser Capabilities组件增加的特性之一是提供了一种方式,以获得更多的有关调用网页的特定客户的信息。
b r o w s c a p,i n i文件的信息只适用于特定类型的所有浏览器,所以组件仅能报告所安装的浏览器的共同特性,例如能知道浏览器是否支持 c o o k i e,但不能知道用户是否已在浏览器“选项”
对话框中关闭了 c o o k i e。
同样,使用复杂的页面设计时,最好了解用户使用的连接类型,以便能选择大小适当的图像文件传送给他们,例如用户通过局域网 (而不是调制解调器 )连接,则允许我们提供更加丰富的环境。如果能知道用户所采用的屏幕分辨率、浏览器所用的语言、操作系统和处理器类型等参数,对于我们的设计是有帮助的。
IE 5通过使用缺省行为提供这种信息,这是客户端网页的一个元素。 IE 5中的行为是新增加的,其他的浏览器不支持,这是一种对网页中的元素添加特殊功能的方法,通过 S T Y L E属性 (或 C S S风格表项 )和元素联系起来。特别是,IE 5中提供的 c l i e n t C a p s行为能用于提供有关客户机和浏览器设置以及当前选项的信息。
通过创建一种元素和与之相连的 c l i e n t C a p s行为,能通过该元素查询到有关客户的信息。
下列页面来自我们自提供的示例文件 ( b r o w s c a p _ c o o k i e,h t m )正是这样做的。它首先定义了应用于 < I E,c l i e n t c a p s >类型的所有元素的包含 c l i e n t C a p s行为的风格。这是 X M L语法,在 < H T M L >
标记的 X L M N S属性中使用为当前网页定义的名称空间。
然后,页面 b r o w s c a p _ c o o k i e,h t m从应用 c l i e n t C a p s行为的元素得到一系列值,并且建立一个包含这些值的 c o o k i e,最后,把这个 c o o k i e分配给文档的 c o o k i e属性,以便有对这个特定服务器目录的页面请求时,将它传送给服务器。
第 6章 活动服务器组件 计计 187下载为了使用这个 c o o k i e,只需把特定的 M E TA D ATA指令插入到 A S P页面中。如下所示:
现在,运行这个 A S P网页时,会自动把页面 b r o w s c a p _ c o o k i e,h t m发送给客户机,客户机便运行这个行为特性,然后返回 c o o k i e,随后
Browser Capabilities组件把 c o o k i e的内容添加到组件实例的可用属性的列表中,查询方法与查询
b r o w s c a p,i n i文件创建的属性所用的方法相同。
Browser Capabilities示例网页显示两类系列数值,一类是从由 b r o w s c a p,i n i文件决定的属性中收集的数据,另一类来自客户端 c o o k i e页面。当然,
不限于仅仅收集来自客户端页面中的 c l i e n t c a p s行为的值,使用动态 H T M L技术可以查询浏览器的任何属性或者是像 n a v i g a t o r,a p p N a m e这样的传统对象属性。 Browser Capabilities组件示例页面如图 6 - 8所示。
6.2.6 Content Rotator组件
Content Rotator组件像一个简化的 Ad Rotator组件,需要提供一种内容调度文件 ( C o n t e n t
188计计 ASP 3 高级编程 下载图 6-8 Browser Capabilities组件示例页面
Schedule File)。该文件仅是一种包含文本段和 H T M L代码段的文本文件,Content Rotator组件可在页面中自动显示其中的一个。调度表文件可以包括任何数量的文本内容条目,并可规定比率,用以控制在返回网页中每个条目的显示频率。
1,内容调度文件内容进度文件的结构比 Ad Rotator的调度文件简单,仅需提供要使用的各个文本字符串的列表,由前面加两个百分号 ( % % )的语句行说明。为了设置每个条目的比率 (决定它出现在返回页面中的频率 ),在双百分号的后面添加了一个数字,其后还可跟一对前向斜线符 ( / / )添加注释。
如:
这个例子说明了可以用于网页中的三个文本字符串,比率分别是 3,4和 2,所以条目将以
3 / 9,4 / 9和 2 / 9的频率出现。注意 (和 Ad Rotator 组件一样 )每个字符串的实际出现是随机的,然后经修正后获得相应的比率,如果调入网页九次,可能不会正好得到这个结果。
2,Content Rotator组件的成员
Content Rotator组件仅提供两个方法,用于从内容调度文件中检索内容,如表 6 - 5所示。
表 6-5 Content Rotator组件的方法及说明方 法 说 明
G e t A l l C o n t e n t (s c h d u l e _ f i l e) 检索和显示 s c h d u l e _ f i l e文件中的所有字符串
C h o o s e C o n t e n t (s c h d u l e _ f i l e) 检索 (但不显示 )来自 s c h d u l e _ f i l e文件的下一个合适的内容字符串
3,使用 Content Rotator组件为了从调度文件中获得指定段的文本和 H T M L,可使用对象的 C h o o s e C o n t e n t方法检索一个条目,按照内容调度文件中规定的比率。可以使用 R e s p o n s e,Wr i t e方法将其插入到发送给客户机的输出流中。
这个代码使用了和页面在同一目录中的调度文件,如果这段代码存放在其他地方,必须注明调度文件的路径,这个路径可以是一个相对于 We b网站根目录的物理路径或是一个完整的虚拟路径。
第 6章 活动服务器组件 计计 189下载如果想显示内容调度文件中的所有内容字符串,
可 以 使 用 对 象 的 G e t A l l C o n t e n t 方 法,如
C h o o s e C o n t e n t方法的情况一样,必须提供调度文件的路径。例如下面的代码得到了内容调度文件中的所有内容并显示在网页里。注意这个方法把内容自动地插入到网页中,所以不必使用 R e s p o n s e,Wr i t e方法,
这个方法也自动地在每个条目之间加了一个水平线。
为了研究 Content Rotator组件的作用,从,A S P
Installable Components”主菜单打开提供的示例页面,
这个页面使用前面讲过的内容调度文件。调用
C h o o s e C o n t e n t方法,并把一个条目放在页面的顶部,
然后使用 G e t A l l C o n t e n t方法显示调度文件中所有条目的内容。 Content Rotator组件示例页面如图 6 - 9所示。
6.2.7 Page Counter组件
Page Counter组件用于统计每个网页被访问的次数,该组件定期把统计的数据存入服务器磁盘上的一个文本文件 — 访问次数统计数据文件 (Hit Count Data File)中,所以在停机或出现错误信息,当前数据也不会丢失。
1,Page Counter组件的成员
Page Counter组件提供了向该文件增加访问次数的方法以及读取和重新设置访问计数总和的方法,如表 6 - 6所示。
表 6-6 Page Counter组件的方法及说明方 法 说 明
H i t s ([ P a g e _ P a t h ]) 返回由 P a g e _ P a t h指定的网页的访问次数,如果选项 P a g e _ P a t h省略的话,
返回的是当前网页的访问次数
P a g e H i t ( ) 增加当前网页的访问次数
R e s e t ([ P a g e _ P a t h ]) 设置由 P a g e _ P a t h指定的网页的访问次数为 0,如果选项 P a g e _ P a t h省略的话,设置当前网页的访问次数为 0
2,使用 Page Counter组件下面例子使用 J S c r i p t语言来说明 Page Counter组件的使用,先用 S e r v e r,C r e a t e O b j e c t方法创建对象实例,然后调用 H i t s方法得到对当前网页的访问次数。如果访问次数达到 5次,则把计数器重新设置为 0,并且在网页中放置一个链接,以便向访问者通知成绩。
190计计 ASP 3 高级编程 下载图 6-9 Content Rotator组件示例页面注意在第二个 R e s p o n s e,Wr i t e语句中,后向斜线 ( \ )的使用是防止 J S c r i p t引擎把引号看作字符串的结束。
本书提供了一个使用 Page Counter组件的示例网页。
然而,由于在每个示例页面里使用一个 V B S c r i p t包含文件,因此采用 V B S c r i p t为这个组件示例编写程序。尽管在一个 A S P网页里,混用脚本语言是可能的,但在 S S I
的 # i n c l u d e文件中使用脚本语言能使网页缓存出现问题,
并会引起不可预测的结果。虽然脚本语言不同,但示例网页的工作方式与上述相同。 Page Counter组件示例页面如图 6 - 1 0所示。
该网页中包含的 < F O R M >段中含有两个按钮,两个按钮都把窗体提交以重新调入网页。
在网页的开头,与其他的示例网页一样,在请求中查找相关的按钮名字。在本页面中,
我们仅对第二个名为 c m d R e s e t的按钮感兴趣,如果点击了该按扭,运行 Page Counter组件的
R e s e t方法,重新设置本页面的访问次数为 0。
前面看到的代码将调用 P a g e H i t方法把计数器设置为 1,并显示在网页里。注意已经使用了
H i t s和 R e s e t方法而没有给可选参数提供数值,所以它们都在当前网页计数器上操作,当然能够在另一个网页中使用,并可以对一些网页的统计结果汇总。
6.2.8 Permission Checker组件
Permission Checker组件用来检测用户当前正在访问网站的帐号是否允许读取某个特定文件或者访问某个资源 (仅在 Windows NT/2000而不是在 Windows 9X)。可以用它来定制页面,
这些网页中仅包含当前用户允许访问的资源的链接,这项技术对于隐藏限制访问的网页和资源是非常有用的,它可以使被限制的访问者不知道这些资源的存在,不会产生强行进入其中的企图。
第 6章 活动服务器组件 计计 191下载图 6-10 Page Counter组件示例页面
1,Permission Checker组件的成员
Permission Checker组件只有一个方法,如表 6 - 7所示。
表 6-7 Permission Checker组件的方法及说明方 法 说 明
H a s A c c e s s ( f i l e _ p a t h ) 检查当前执行页面的用户帐号是否允许访问 f i l e _ p a t h指定的页面。该路径是一个网页、文件或资源的物理的或虚拟的路径如果当前帐号允许访问,返回值为,Tr u e”,否则;返回值为,F a l s e”
2,Permission Checker组件的工作过程通常,除非特别规定,否则用户是匿名访问网页的,因此 I I S本身会使用自己的 Wi n d o w s
帐号访问网页,缺省值是 I U S R _ m a c h i n e n a m e (例如 I U S R _ W R O X B O X ),Permission Checker组件检查 I U S R _ m a c h i n e n a m e帐号是否能够访问指定的网页或资源。
然而,通过 Internet Services Manager的 Allow Anoymous Access选项关闭对 We b网站或者对某一指定目录的匿名访问,可以强迫 I I S提示用户输入一个有效用户帐号的用户名和口令,
然后使用该帐号“非匿名访问”资源。
对一个网站或目录,在 Internet Services Manager上的 P o r p e r t i e s对话框中的 D i r e c t o r y
S e c u r i t y选项卡中设定访问控制。在对话窗中的 Anonymous access和 Authentication control中,
点击 E d i t按钮打开 Authentication Methods对话框,关闭 Anoymous Access选项。设置界面如图
6 - 11所示。
图 6 - 11 访问权限的设置界面当 Permission Checker组件在用户用其自己的帐号 (而不是 I U S R _ m a c h i n e n a m e )访问的网页中被实例化时,将检查其帐号是否可以访问这个指定的资源,如果不能使用匿名访问,那么所有的用户必须提供帐号细节。可以使用 Windows Explorer对每个文件或资源设置指定的权限
(在相应的 P r o p e r t i e s对话框中的 S e c u r i t y选项卡中 )。设置界面如图 6 - 1 2所示。
3,使用 Permission Checker组件可以使用 Permission Checker组件检查当前用户是否有使用 H a s A c c e s s方法访问其他页面
(网站上的任何页面 )的权限。本书提供了一系列实例页面,可用来试验 Permission Checker组件,打开此示例 (从 ASP Installable Components主菜单里打开 ),会看到网页里的三项链接,如图 6 - 1 3所示。
192计计 ASP 3 高级编程 下载图 6-12 权限设置界面图 6-13 使用 Permission Checker组件的示例页面链接所指向的每一个页面都位于 C h a p t e r 0 6示例目录下的 Permission Checker子目录中。
Permission Checker组件检查当前用户是否有访问各个网页的权限。如果用户确实有访问这个网页的权限的话,这个网页的条目将是一个超级链接。
第 6章 活动服务器组件 计计 193下载现在我们有访问三个有访问限制的网页的权限,所以这三个条目都是超级链接。然而这里不存在第四个链接 (它可以被移去或是删除 ),因为组件不能使用当前用户 (也就是
I U S R _ m a c h i n e n a m e )的帐号来访问它,因此不显示为超级链接。
注意这里选择仅移去超级链接但留下了链接文本,
在实际情况中应删除不可访问的网页的整个条目。
如 果 从 P e r m s s i o n C h e c k e r 子 目 录 中 的
r e s t r i c t e d _ 2,a s p文件上删除 R e a d (和任何其他的 )权限,
并重新调入网页,对应的条目将不显示为一个超级链接,如图 6 - 1 4所示。
6.2.9 MyInfo 组件
M y I n f o组件最初是与个人 We b服务器一起引入的,用于存储服务器管理员提供的个人信息。它现在可以用在 ASP 3.0中,为名称 /数值对,或者任何其他类型的可以表示为文本字符串的信息提供永久存储。该信息以 X M L格式在文本文件 m y i n f o,x m l中保存,此文件位于 We b服务器的 i n e t s r v目录下。在 Windows 2000中,其路径为 Wi n N T \ s y s t e m 3 2 \ i n e t s r v \。
和 C o u n t e r组件一样,只需创建一个简单的 M y I n f o组件的实例就可以使得 We b网站上的所有页面均能获得其信息,确保缺省 We b站点上的 g l o b a l,a s a文件中有下面的代码:
1,使用 MyInfo 组件
MyInfo 组件缺省时没有属性和方法。然而可给其添加属性,简单地说,也就是赋一个名称和数值给这些属性。比如,可以添加有关工作环境和合作伙伴的信息。
同别的组件属性一样,可以使用下面代码检索数值。
这是一种在两个页面请求之间存储值的有用方法,不需要用户的 S e s s i o n对象。这也为将来可能改变的数值提供了一个存储区域,采用这些值的页面将会在下次运行时自动地采集这些变化的值,从而避免必须编辑大量的其他页面。
本书提供了一个使用 MyInfo 组件的简单示例,这个示例从 ASP Installable Components主
194计计 ASP 3 高级编程 下载图 6-14 删除 R e a d权限后的页面显示菜单中运行,使用刚才讨论的设置组件属性的代码,并可改变属性值,如图 6 - 1 5所示。
图 6-15 使用 M y I n f o组件的页面首次打开页面时,创建属性时使用了一个标志变量 S e t D e f a u l t Va l u e s,该变量存放在用户的
S e s s i o n对象中。当页面在每个会话里首次打开时,把属性参数设置成“缺省”值,之后,把此标志变量设置成 Ye s。在当前会话中,重新调入页面时,这个数值将不再重新设置成缺省值。
每次调用页面时,检查请求中的值是否是用于改变属性值的按钮的名称。这个按钮在一个包含下拉列表和文本框的 < F O R M >上。如果发现点击了这个按钮,则从下拉列表和文本框里采集数值,然后用这些数值改变相关的属性值。
6.2.10 To o l s组件
To o l s组件提供了一些有用的方法,可在页面中检查文件是否存在、处理一个 H T M L窗体、
以及产生一个随机整数,还有用于 M a c i n t o s h计算机的一些方法,还可以检查是否存在某个服务器插件以及检查当前用户是否是网站的拥用者。
1,To o l s组件的成员
To o l s组件提供了五个方法,其中两个依赖于操作系统,如表 6 - 8所示。
第 6章 活动服务器组件 计计 195下载表 6-8 To o l s组件的方法及说明方 法 说 明
F i l e E x i s t s (re l a t i v e _ u r l) 如果 re l a t i v e _ u r l指定的文件存在,返回值为 Tr u e,否则为 F a l s e。必须给出虚拟相对路径及文件名,并且文件必须存在于发布的 We b网站目录中。
R a n d o m ( ) 产生一个位于 - 3 2 7 6 8 ~ 3 2 7 6 7之间的随机整数。使用 A B S函数 ( V B S c r i p t )或
M a t h,a b s ( J S c r i p t )得到在 0 ~ 3 2 7 6 8之间的正整数。使用 M o d运算符 ( V B S c r i p t )或 %
运算符 ( J S c r i p t )得到指定范围内的一个数值。例如:
intRand = (objTools.Random Mod 76)+25
得到一个在 2 5 ~ 1 0 0之间的整数。
P r o c e s s F o r m (output_url,通过 t e m p l a t e _ u r l指定的文件处理一个 H T M L窗体,并且插入来自窗体中已
template_url,[insert i o n _ p o i n t ]) 提交给当前页面的数值。结果写进 o u t p u t _ u r l指定的文件,如果指定了可选项
i n s e rt i o n _ p o i n t(字符串 )参数的话,组件可在已存在的输出文件中找到这个字符串,并在该位置插入新的内容。如果 i n s e rt i o n _ p o i n t参数没有指定,任何已存在的 o u t p u t _ u r l文件则被新的输出取代
O w n e r 仅适用于 M a c i n t o s h机,如果当前用户帐户是 We b网站的拥有者,返回值为
Tr u e,否则返回值为 F a l s e
P l u g i n E x i s t s (p l u g i n _ n a m e) 仅适用于 M a c i n t o s h机,如果指定的服务器 p l u g i n _ n a m e安装在机器上,返回值为 Tr u e,否则为 F a l s e
2,使用 F i l e E x i s t s方法在允许用户访问之前,可以使用 F i l e E x i s t s方法检查某些文件是否存在于服务器中 (注意这个方法和 FileSystemObject.FileExists 以同样的方式工作 )。
下面的例子中,用户提供了网页的相对 U R L,如果用户想通过在名为 t x t U R L的文本框中键入 U R L打开网页,在重新定向之前可以检查其是否存在。
这里提供了一个示例页面 (使用 V B S c r i p t )来演示组件的三种方法 (非 M a c i n t o s h ),可以从
ASP Installable Components主菜单中运行,如图 6 - 1 6所示。
图 6-16 运行 To o l s组件的方法的页面
196计计 ASP 3 高级编程 下载网页的第一部分允许输入一个文件的相对 U R L,并告诉用户该文件是否存在。示例提供的 缺 省值 是查 看 在网 站 的根 目录 中 是否 有
g l o b a l,a s a文件。点击按钮时,说明该文件是否可找到的信息将放在页面的顶部,如图 6 - 1 7所示。
把页面的所有控件放在 < F O R M >中,提交回本页面,这已经成为一种规范。在页面的开始,
查看点击了哪个按钮。如果是 F i l e E x i s t s的按钮,
就调用组件的 F i l e E x i s t s方法并显示合适的信息。
3,使用 To o l s,R a n d o m方法在 A S P页面中,有时需要一个随机数来完成某些任务,例如,把用户重新定位到一个随机网页、选择颜色或显示每日提示。可以使用 V B S c r i p t中的 R n d函数,但要把所得数值转变成指定范围内的整数。 To o l s组件的 R a n d o m方法更易于使用,因为能够直接提供整数值。
R a n d o m方法的结果是一个在 - 3 2 7 6 8 ~ 3 2 7 6 7范围中的整数值,为了获得一个指定范围的整数,可以使用脚本语言中的 A b s函数并对下一个最大的整数取模。例如为了用 V B S c r i p t语言创建 0 ~ 2 0的正整数,可以使用下列语句:
为了得到在 5 0 ~ 1 0 0之间的数值,可以用:
示例网页使用这项技术生成随机数时,首先需要检查由用户输入的数值,以保证这些数值既是有效正整数又有正确的相对关系。
当页面重新调入时,结果显示在网页的顶部,如图 6 - 1 8所示。
第 6章 活动服务器组件 计计 197下载图 6-17 运行 F i l e E x i s t s方法的结果图 6-18 运行 R a n d o m方法的结果
4,使用 To o l s,P r o c e s s F o r m方法
To o l s组件中最复杂的方法是 P r o c e s s F o r m,用来读取存在磁盘上的临时文件,并在其中插入创建的信息 (可能来自当前页面的 R e q u e s t,F o r m集合的内容 ),然后把结果作为一个文件输出到磁盘,这个方法的语法是:
临时文件和输出文件相对于当前页面使用相对 U R L来定义。输出文件可以是 A S P网页,
如果这样,当其在浏览器中打开时,将正常处理。临时文件可以包含普通的 A S P代码,但不运行,仅简单地拷贝到输出文件。然而,如果把临时文件中的 A S P代码放在 < % %,,,% % >限定符中,当临时文件调入时代码将被执行,这允许动态生成的数值 (诸如进行处理的时间和日期 )
插入到输出页面中。
下面是示例文件 t e m p l a t e,a s p (在 c h a p t e r 0 6目录的 To o l s子目录中 ):
示例页面包含着预定使用这个临时文件的控件,这些控件创建一个和临时文件在同一个文件夹中的名为 o u t p u t,a s p的输出文件,如图 6 - 1 9所示。
图 6-19 运行 To o l s,P r o c e s s F o r m方法的界面点击按钮时,将运行一部分 A S P代码,从文本框中采集数据并调用 P r o c e s s F o r m方法:
198计计 ASP 3 高级编程 下载
(1) 设置输出文件的访问权限如果得到一个,M S W C,Tools error 80004005 Couldn't open output file”错误信息,这意味着 I I S不允许向指定的目录中写入输出文件。解决这个问题最快捷的方法是,在 P r o p e r t i e s对话框中的 S e c u r i t y选项卡中,将相应的 To o l s目录以及存放 o u t p u t,a s p的目录的 E v e r y o n e组的 F u l l
C o n t r o l设置成允许,如图 6 - 2 0所示。
(2) 查看文件内容图 6 - 2 1显示了上面代码用缺省值运行的结果,可以看到原来的临时文件内容,以及使用
P r o c e s s F o r m方法插入到输出文件中的内容。
这里省略了显示来自前面见过的文件内容的程序代码。显示内容的方法与 A S P
Installable Components主菜单页面中用于显示内容链接列表文件的方法相同。使用
F i l e S y s t e m O b j e c t和 Te x t S t r e a m对象的实例把整个文件读入到一个字符串中,然后将其插入网页中 (记住要使用 S e r v e r,H T M L E n c o d e方法,以便把字符,<”和,>”转换成可用于显示的字符 )。
第 6章 活动服务器组件 计计 199下载图 6-20 设置输出文件访问权限的界面 图 6-21 输出文件的内容
(3) 关于插入点参数
P r o c e s s F o r m方法中可选的 i n s e r t i o n _ P o i n t参数能用来在文件中的特定点插入文本,这个方法是先查找输出文件中特定字符串的第一个实例,然后在该位置插入创建的新内容,在输出文件中通过把星号 ( * )放在 i n s e r t i o n _ p o i n t字符串前面来放置新内容。如果省略了 i n s e r t i o n _ p o i n t
参数,新的内容会取代整个输出文件。
注意 i n s e r t i o n _ p o i n t参数在 To o l s,P r o c e s s F o r m方法的早期版本中不能使用。
6,2,11 Logging Utility组件
Logging Utility组件是 ASP 3.0的新组件,提供了访问日志文件的方法,这个日志文件是由服务器支持的用于 We b和 F T P网站的 I I S创建的。
1,Logging Utility组件的成员
Logging Utility组件提供了六种方法,能读取日志文件的内容、把新记录写进已存在的日志文件中。这些方法和上一章讨论的 F i l e S y s t e m O b j e c t对象的方法有相似性,如表 6 - 9所示。
表 6-9 Logging Utility组件的方法及说明方 法 说 明
A t E n d O f L o g ( ) 用 R e a d L o g R e c o r d方法遍历记录时,如果文件中的所有记录都已读出,
返回值为 Tr u e
C l o s e L o g F i l e s (i o _ m o d e) 关闭打开的日志文件,io_mode的值指定要关闭的文件,常数 ForReading
( 1 )表示关闭打开供读出的所有文件,F o r Wr i t i n g ( 2 )表示关闭打开供写入的所有文件,A l l O p e n F i l e s ( 3 2 )表示关闭打开的所有文件
O p e n L o g F i l e(filename,io_mode,S 打开 f i l e n a m e指定的日志文件或日志文件集,可选的 i o _ m o d e参数可以
e rvice_name,service_instance,设置成 F o r R e a d i n g (缺省值,1 )或 F o r Wr i t i n g ( 2 )。当读取到一个特定的 I I S
O u t p u t _ f o r m a t ) 服务 (例如,W 3 S V C,和,1” ) 时。可选的 s e rv i c e _ n a m e 和
s e rv i c e _ i n s t a n c e参数限制从文件中返回的记录。可选的 o u t p u t _ f o r m a t参数指明写入文件时使用的格式
R e a d F i l t e r (s t a rt,e n d) 当在规定的时间和日期范围内读取文件时,限制返回的记录,两个参数都是可选的,如果忽略的话,s t a rt是文件的第一个记录,e n d是最后一个记录
R e a d L o g R e c o r d ( ) 从用 O p e n L o g F i l e方法打开的当前日志文件中读取下一个记录
WriteLogRecord (l o g g i n g _ o b j e c t) 从打开供读出的文件中把记录写入一个打开供写入的文件中,参数是一个引用保存源记录的 Logging Utility组件实例的对象变量
Logging Utility组件提供了二十种与 I I S日志记录相对应的属性,如表 6 - 1 0所示。
200计计 ASP 3 高级编程 下载表 6-10 Logging Utility组件的属性及说明属 性 说 明
B y t e s R e c e i v e d 请求时从浏览器收到的字节数
B y t e s S e n t 响应时送至浏览器的字节数
C l i e n t I P 客户机或其主机 (即代理服务器 )的 I P地址
C o o k i e 在请求中传送的 c o o k i e内容
C u s t u m F i e l d s 加到请求中的定制报头的一个数组
D a t a Ti m e 请求的日期和时间 ( G M T )
M e t h o d 操作类型,如,G e t”和,P o s t”
P r o t o c o l S t a t u s 返回到客户机的状态消息,即,200 OK”
P r o t o c o l Ve r s i o n 协议版本字符串,如,H T T P / 1,1”
R e f e r e r 包含初始化请求链接的网页的 U R L
S e r v e r I P I I S机器的 I P地址
S e r v e r N a m e I I S服务器的机器名
S e r v e r P o r t 请求到达的端口号,如,8 0”
S e r v i c e N a m e 服务器名称,如,M S F T P S V C”或,W 3 S V C”
Ti m e Ta k e n 检索和创建返回网页的总处理时间
U R I Q u e r y 请求中加到 U R L的查询字符串中的所有参数
U R I S t e m 请求的目标 U R L
U s e r A g e n t 由客户机发送的用户代理字符串
U s e r N a m e 如果不是匿名地访问服务器,U s e r N a m e是用户的登录
Wi n 3 2 S t a t u s 处理了请求后返回的 Wi n 3 2状态码
2,使用 Logging Utility 组件
Logging Utility 组件最普遍的应用是用于对日志文件的自定义查询。从现有文件中选择一些记录写入新文件的能力,意味着能够汇总某些类型的条目,或者有选择性地挑出一些记录供将来使用。
为了使用 F o r R e a d i n g,F o r Wr i t i n g和 A l l O p e n F i l e s常数,必须在网页的 < H E A D >部分包含
M E TA D ATA指令。
为了遍历记录,仅须打开文件并且重复调用 R e a d L o g R e c o r d,直到 A t E n d O f L o g的返回值为 Tr u e。在下面的例子中将过滤记录,仅获得最后 2 4小时以内的记录。
第 6章 活动服务器组件 计计 201下载本书提供了演示使用 Logging Utility组件的一个示例网页,这个网页可以从 A S P
Installable Components主菜单运行。
确 保 在 Internet Services Manager中 不 允 许 匿 名 访 问 包 含 示 例 文 件 的 目 录 或
l o g g i n g u t i l i t y,a s p文件,否则将不能访问日志文件。打开 l o g g i n g u t i l i t y,a s p文件或包含该文件的目录的 P r o p e r t i e s对话框的 Directory Security选项卡,点击 Anonymous access and authentication
c o n t r o l部分的 E d i t按钮,打开 Authentication Method对话框,并关闭 Anonymous access选项。
必须改变日志文件的文件名以适合你的计算机。在缺省 We b网站的 P r o p e r t i e s对话框的
Web Site选项卡中,打开 W3C Extended Logging,如图 6 - 2 2所示。
图 6-22 使用 Logging Utility组件的设置 1
图 6-23 使用 Logging Utility组件的设置 2
202计计 ASP 3 高级编程 下载在这个对话框中,点击 P r o p e r t i e s按钮,打开 Extended Logging Properties对话框,在这里会找到要用的文件名。选择固定大小的日志文件选项,这样文件名将是 e x t e n d 1,l o g和
e x t e n d 2,l o g等等。如图 6 - 2 3所示。
打开 Extended Properties选项卡,确保选中想要的条目,如图 6 - 2 4所示。
图 6-24 使用 Logging Utility组件的设置 3
现在可以运行示例网页并检查结果,可以使用下列代码在 H T M L表中显示数值。
其结果如图 6 - 2 5所示。
第 6章 活动服务器组件 计计 203下载图 6-25 使用 Logging Utility组件的示例运行结果
6.3 第三方服务器组件在本节中,简要概述 A S P系统中要用到的一些常见的商用和免费的第三方服务器组件。
开发 We b网站时,必须完成的两个任务是管理兼容性以及向服务器上载文件。下面将介绍的两个组件能有助于完成上述的任务,而且还介绍另外一个组件,可取代 M i c r o s o f t的
Registry Access组件 (该组件一般是从相应的 We b网站得到的 )。
在附录 G中,给出了一些最为有用的组件的清单。
6.3.1 BrowserHawk组件很多人使用由 I I S及 A S P提供的 Browser Capability组件时,都会遇到一个麻烦,浏览器的定义文件 ( b r o w s c a p,i n i )要求定期的维护或替换以跟得上新版浏览器的要求。
C y s c a p e公司提供了 b r o s c a p,i n i的升级版本,同时提供了他们自己的能在服务器端和客户端进行浏览器检测的组件,而且,还提供了便捷的图形界面用于查看及修改其自己的浏览器定义文件,如图 6 - 2 6所示。
可以看到对于每个浏览器类型,都有许多属性,如动态 H T M L、样式表,J a v a S c r i p t版本、
文件上载能力,SSL(Secure Sockets Layer)支持、操作系统细节以及语言等。与 M i c r o s o f t的
Browser Capability组件一样,也可以添加自己的内容。这里还有一个非常有用的具有向导风格的特性,能帮助我们把新的浏览器类型添加到定义文件中,如图 6 - 2 7所示。
B r o w s e r H a w k组件具有辨认出新的浏览器 (采用一项特殊的模式匹配算法 )以及那些缺省支持的一系列浏览器的能力,包括 O p e r a和 We b T V。使用过滤功能添加新属性也很容易。
当然,B r o w s e r H a w k组件的最大优点可能是定期对来自 C y s c a p e公司的 We b网站的浏览器定义文件新版本进行自动检测,同时把一些内容吸收合并到当前使用的定义文件里,这意味着没有必要不断地将定义文件拷贝到所有的 We b服务器中。
204计计 ASP 3 高级编程 下载图 6-26 BrowserHawk组件图 6-27 向定义文件添加新浏览器的向导
B r o w s e r H a w k组件使用起来比较容易,与 Browser Capability组件是兼容的,需要做的是在创建组件实例的 S e r v e r,C r e a t e O b j e c t方法或 < O B J E C T > 元素中改变 P r o g I D 。把
,M S W C,B r o w s e r Ty p e”改为,c y S c a p e,b r o w s e r O b j” 。
对可能出现的问题,应该阅读 B r o w s e r H a w k组件的文档。
可从 C y s c a p e公司的 We b网站 ( h t t p,/ / w w w,c y s c a p e,c o m )下载 B r o w s e r H a w k的拷贝。
本章中已经包含了使用 B r o w s e r H a w k组件的示例网页,使读者能够了解如何使用
B r o w s e r H a w k组件,在 C h a p t e r 0 6目录下的 B r o w s e r H a w k子目录中可查找到这个示例页面。
第 6章 活动服务器组件 计计 205下载
6.3.2 SA-FileUp组件在很多 We b网站上,一个常规要求是,服务器接受客户机发送的文件的能力如何?在 I I S
4,0里,M i c r o s o f t提供了一个名为 Posting Acceptor组件完成这项工作,IIS 5.0和 ASP 3.0的标准安装中没有该组件,如果安装 Site Server Express的话,则需要包含这一组件。可以从 M i c r o s o f t
We b网站 h t t p,/ / w w w.microsoft.com/windows/software/webpost/ post_accept.htm上下载该组件。
然而,很多人发现 Posting Acceptor组件在功能上有局限性且很难编程。现在一个流行的替代品是来自 Software Artisans的 S A - F i l e U p组件。与 Posting Acceptor组件 (仅是 I S A P I型过滤器 )不同,S A - F i l e U p组件是一个真正的 ActiveX DLL服务器组件,容易集成到 A S P网页中。这意味着可以使用别的 A S P页面或组件上使用的相同的有关设定页面安全保护及限制用户访问的技术。该组件也可在 M T S / C O M +的环境中上运行。
使用 S A - F i l e U p组件的教程可在 h t t p,/ / w w w,a c t i v e s e r v e r p a g e s,c o m / u p l o a d /站点上找到,所以这里只给出了结果。本章的示例中已经包含了使用该组件的示例页面 (在 C h a p t e r 0 6目录下的
S A F i l e U p子目录中 ),可用来了解如何使用该组件,有必要的话可从 Software Artisans网站
h t t p,/ / w w w,s o f t a r t i s a n s,c o m /上下载 S A - F i l e U p的拷贝。
使用 S A - F i l e U p组件
S A - F i l e U p组件的示例页面创建了一个简单的页面,包含一个 F i l e U p l o a d元素和一个按钮,
并使用了 H T M L的 I N P U T元素,如图 6 - 2 8所示。
图 6-28 使用 S A - F i l e U p组件的示列页面用户提交窗体时,其中的内容传送给了服务器,并且 A S P页面创建了一个组件实例,并且开始向服务器上传信息,以后组件返回一系列描述上传的文件的数据,如图 6 - 2 9所示。
S A - F i l e U p组件读取文件并把它以标准的磁盘文件或二进制的数据库数据的形式暂存在服务器上。有了它,就能用 A S P控制上传过程、限制上传文件的大小,甚至删除上传文件,也
206计计 ASP 3 高级编程 下载能动态地改变其名字和上传文件的位置。
图 6-29 使用 S A - F i l e U p组件的结果
6.3.3 RegEx 注册表访问组件
Microsoft IIS 4.0提供的一个示例组件能够访问服务器上的系统注册表。这个功能有助于检查诸如安装的软件的版本,或者检查 I I S和操作系统使用的各种参数。
在 IIS 5.0中取消了这个组件,但如果需要这个功能,可以从其他商用版本中获得。 R e g E x
组件是其中之一,能够访问本地机器注册表的任何部分 (假如允许当前用户访问 )。在 A S P页面的匿名访问中,当前用户是 I U S R _m a c h i n e n a m e帐户。
1,RegEx组件的成员
R e g E x组件提供了四个读写注册表的方法和一个访问内部组件版本信息的方法,如表 6 - 11
所示。全部信息和文档随 R e g E x组件提供,其测试版本可以从 h t t p,/ / w w w,s t o n e b r o o m,c o m /下载。其附带的示例页面包含在本书提供的示例中,然而你需要自己下载组件本身。
表 6 - 11 RegEx 组件方法及说明方 法 说 明
G e t R e g Va l u e (R e g i s t ryHive,SubKeyString) 从注册表中返回给定的子键的缺省值,如果其值不能访问的话,
则返回一个空字符串
S e t R e g Va l u e (R e g i s t ryHive,SubKeyString,在给定的子键中,创建或更新“缺省”值,把数据类型设置成
N e w Va l u e) R e g _ S Z (字符串 )。如果更新成功的话,返回 Tr u e;否则,返回
F a l s e
G e t R e g Va l u e E x (R e g i s t ryHive,SubKeyString,从特定的子键中返回被命名的值,用返回数值的数据类型,更
ValueName,Va l u e Ty p e) 新方法的最后一个参数所指定的变量。如果数值不能访问的话,
则返回一个空字符串,并且 R E G _ E R R O R作为数据类型第 6章 活动服务器组件 计计 207下载
(续 )
方 法 说 明
S e t R e g Va l u e E x (R e g i s t ryHive,SubKeyString,在给定的子键中,创建或更新被命名的数值,把数据类型设置
ValueName,NewValue,Va l u e Ty p e) 为方法的最后一个参数指定的类型 d a t a _ t y p e。如果更新成功的话,返回 Tr u e;否则,返回 F a l s e
G e t I n t e r n a l VersionNumber( ) 返回组件的内部版本号,如果是一个测试版本,返回值之中也包含这些信息
2,使用 R e g E x组件
R e g E x组件提供了一个用 Visual Basic编写的示例程序,可用来试验其中包含的方法,实例程序使用 R e g E x组件,允许对系统注册表的任何部分以所支持的数据类型之一或以缺省的字符串数据类型读写数据,如图 6 - 3 0所示。在进行任何更新之前会显示一个警示以防止意外操作。
图 6-30 使用 R e g E x组件的示例程序另外还有一个比较简单的 A S P实例,可显示 We b服务器注册表中的一些数据,并且允许读和设置一个“测试”子键。可以修改这个页面,在你自己的应用程序中使用时没有限制。图
6 - 3 1所示的是在 N T 4中 IIS 4.0上运行的结果。
图 6-31 使用 R e g E x组件的另一示例的结果
208计计 ASP 3 高级编程 下载要记住,改变注册表中的数值可能导致系统不正常地工作,编辑注册表内容之前应该备份注册表文件。
6.4 小结本章讨论了 A S P如何利用服务器组件增加其他组件所不能提供的特性,也考虑了服务器组件和其他类型的 A S P对象 (如 A S P内置的对象和在脚本运行期库中的对象 )的区别。
在研究由 ASP 3.0和 IIS 5.0提供的可安装组件之后,介绍了三个提供常规要求的功能的商用组件,也列出了几个可以从 We b上下载的通用组件,其中有一些是免费的或者是共享 /测试版本。
本章主要研究了以下内容:
服务器组件和其他类型的 A S P对象的区别。
概要说明如何实例化服务器组件并得到其引用。
由 ASP 3.0和 IIS 4.0提供的可安装组件,如 Ad Rotator,Content Linking,Page Counter
和 To o l s。
一些可获得的第三方组件。
然而,至今我们还有一个很重要的组件没有涉及到,它就是 A D O。在讨论这个问题之前,
先来讨论另一个基本问题:错误处理和程序调试。
第 6章 活动服务器组件 计计 209下载