载 第6章活动服务器组件 在前几章中,我们已经研究了两类不同的对象:一类是ASP对象模型的内置部分,另 类是脚本运行期库提供的对象。本章将介绍第三类能用于ASP的对象,取名为活动服务器组 件(或者就称为服务器组件) 这些组件在很多场合下就如同在浏览器里或在像 Visual basic编程环境中用于客户端脚本 中的传统 ActiveX控件一样,但是这些组件可在服务器上运行,而不是一个只能运行在客户机 上的对象 现在的问题是:这些组件来自哪里?其中一部分是由常规的ASP/S安装程序提供的,而 另一部分可以从web上免费或有偿获得。本章讨论ASP的各种组件的主要用途,然后介绍可得 到的其他组件的几个范例。一旦感觉到使用这些活动服务器组件得心应手,你就会毫不费力 将其他供应商的产品嵌入到自己的ASP页面中。本章后面有一个第三方组件的列表,本书后 面还将介绍如何创建自己的组件 还有一些用于ASP的组件,但本章不准备讨论。动态Web网站技术的基本用途之一是发布 直接从数据库管理系统和其他类型的数据存储获得的信息,这一用途和从数据库或其他数据 存储中收集数据和存入数据的需求,促使程序员开发服务器端编程。为了使用ASP完成这些 任务,我们可以充分利用称为 ActiveX数据对象( ActiveX Data Objects,ADO)库的组件集。由 于它涉及的内容很多,很难在本章中阐述清楚,还要考虑的其他的组件,本书从第8章开始讲 述相关的内容 本章要讨论的内容有: 服务器组件与在ASP中使用的其他对象的区别。 简要说明如何实例化对象,并得到服务器组件的引用。 ASP3.0和IS提供的可安装组件,例如 AD Rotator、 Content Linking、 Page Counter和 Tools等组件 些第三方提供的组件。 6.1脚本对象与服务器组件的比较 前一章已说明了各种脚本对象,这些对象对于ASP/IIS来说都是从脚本运行期库 (srun.d)中得到的,重要的是不要把这些对象与服务器组件(即本章的主题)混淆一起。 服务器组件通常在其自己的DLL或可执行文件中实现,例如本章将要讨论的“ Content Linking”组件,就是由 nextlink.d!实现的。一旦在服务器安装和注册这个DLL文件,那么其 提供的对象就可以在ASP所支持的任何脚本语言中使用。组件与系统环境的关系如图6-1所示。 大多数 ASP/IIS标准组件针对的是特定任务,也就是要在Wweb网站或局域网上完成的任务 当然,最终想借助ASP达到的任务必须依赖于要想发布的信息和网站的目标。使用预装组件 可以提供一个良好的开端
下载 第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达到的任务必须依赖于要想发布的信息和网站的目标。使用预装组件 可以提供一个良好的开端
1705p3高级程 下载 ASP环境 脚本DLL VBScript DLL 服务器组件DLL JScript DLL 其他系统 其他语言 图6-1组件与系统环境的关系 使用服务器组件 前一章已经介绍了对象和组件在页面中通用的实例化方法,使用服务器组件和使用脚本 运行期库对象的方法完全一致,唯一的区别是,不像脚本对象,服务器组件通常作为单独的 DL文件实现,而且可能要求在使用前先运行一个安装程序,或者手工注册该组件(如果这些 组件在ASP缺省安装时未注册) bject方法 般说来,可以在一个ASP页面中使用ASP内置的 Server对象的 CreateObject方法创建 个对象,例如: Set objThis Server Createobject(this object) var ob]This Server Createobject(this object '): //in JScript 这样就在变量 objThis中创建了该对象的引用,然后可以在脚本中使用该对象;换句话说, 可以在代码中根据需要控制其属性及调用其方法。 2.使用< OBJECT>元素 同样可以使用常规的< OBJECT>元素创建一个对象,该方法同样适用于在Web浏览器页面 中创建对象。ASP支持HTML< OBJECT>元素的特殊实现,而且我可以使用这一方法在页面中 放置一个对象。要在普通的asp文件中定义一个组件或脚本对象的实例,使用下面语句 <OBJECT RUNAT='SERVERSCOPE"PAGE ID='objThisPROGID=this object"> 另一方面,可以使用对象的 CLASSID取代“友好名”或 PROGID < OBJECT RUNAT= SERVER· SCOPE="PAGE·工D=" objThis CLASSID=" CLSID:OACE4881-8305-11CF-9427-444553540000·> 我们使用 SCOPE属性来设定对象的范围,选项是“ SESSION”、“ APPLICATION”和 “PAGE”。如果在普通的asp文件中使用< OBJECT>元素,那么必须同时使用“PAGE”属性, 并忽略 SCOPE属性,因为创建的对象只能在它被实例化的页面中使用。如果在 global. asp文件 中使用< OBJECT>元素,则所创建的对象可在当前会话或整个应用程序中使用,因此 SCOPE 属性可设置为“ SESSION”和“ APPLICATION
图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
第6章活动服务器组件 171 载 3.检测对象实例的存在 常出现的错误是企图创建一个未安装(或未注册)的对象的实例,或者在 CreateObject方 去或< OBJECT>元素中使用错误的对象 Progld。缺省状态下,ASP会出现错误并停止页面的执 给页面添加一些程序代码,在访问对象之前进行检测是必要的。在 VBScript中,可以做 到这一点,方法是:关闭缺省的错误处理,然后使用 ObJecti函数查看对象变量是否真的引用 了一个对象 r Resume Next 'turn off default error handling Set objThis= Server CreateObject(this object If Isobject(objThis)Then he object method On Error Goto o turn the default error handling back on rest of the script goes here esponse Write Sorry, this page cannot be accessed at present response. Flush End工f 在 JScript语言中,可以使用 JScript5.0的脚本引擎中新的错误处理特性,这在第1章中介 / in JScript try i var objThis Server Createobject('this, object): / rest of the script goes here catch (exception)( Response. Write('Sorry, this page cannot be accessed at present): Response. End() 62ASP∥S可安装组件 ASP/IS的标准安装包括一系列服务器组件,这些组件在IIS文档中被描述为可安装组件 ( installable component),尽管缺省状态下它们是完全安装。但也有可能这个名称仅仅是沿用 ASP的前几个版本中的名称。在以前版本中,这些组件需要人工安装。现在,如果要给它们 起个合适的名称,可称为“可实例化的组件 需要注意的是,在第8章将介绍一个特定的可安装组件,即ADO组件。后面的章节中使用 的其他组件都是作为特定的服务或服务器应用程序的一部分而安装的。例如协作数据对象
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 下载
172:商级程 China°bdo ( Collaborative Data Objects,简称CDO和 CDONTS)组件,用于邮件服务器和电子邮件消息 本章的其余部分将讨论,如何使用其他通用性较强的组件为web网站或 Intranet提供增强功能。 在 Windows2000中的 WinNT\System32 MMintesryl目录下可找到这些ASP可安装组件,该目 录也放置一些组件要求的配置文件。下面按字母顺序列出了一些组件 Ad rotator组件用于控制可点击图像的出现,如广告或标题。使用存储在配置文件中的 信息, Ad Rotator能够依据配置文件规定的比率显示不同的图像,同时也具备把可点击 的广告重新定位到相应的URL以及记录图像点击次数的特性 · Browser Capabilities组件使用 User Agent字符串,该字符串由浏览器发往服务器,用来识 别相应的浏览器。它提供了反映特定浏览器功能的一系列属性,例如是否支持脚本 cookie或Java小程序。 Content Linking组件用于提供一系列方便导航的页面,这些页面可被改变或更新而不必 编辑各个页面。该组件采用一个文本文件(含有页面URL和显示顺序),使创建按指定顺 序链接起来的一些页面很容易。 Content rotator组件采用一种配置文件来指定插入到其他页面中的HTML、文本或程序 代码,根据配置文件指定的情况,显示内容的任何部分。 Counters组件能够创建、递增和永久地存储各个在脚本代码中使用的整数计数器的数值 Logging Utility组件提供对web服务器日志文件的访问,并且允许在一个ASP页面内读取 和更新这些数据。这是 Windows2000中随IS50和ASP3.0新增的特性。 MyInfo组件为可在整个网站内访问的名称/值对的存储提供了一个存储空间,这些数据 在服务器上以XML格式的文本文件存储(不同于应用程序作用域,这些数据在Web网站 范围之外仍然保留) Page Counter组件记录访问一个页面的次数,可以用于跟踪页面的点击次数a · Permission Checker组件有助于防止当一个用户试图访问没有正确的权限设置的资源时 引起的脚本错误 Tools组件提供了一些在页面中可以采用的方法,这些方法用来检验一个文件是否存在 处理HIML窗体、生成一个随机整数。另外还有一些用在 Macintosh苹果计算机上的方法, 可以检查是否存在某个服务器插件程序,检查当前用户是否为网站拥有者。 另外一个由IS/ASP提供的组件,即 Status组件,只能用于 Macintosh计算机的个 人Web服务器上。本书没有涉及该组件,若要详细了解该组件,可通过 HTTP:/localhost/lis/htm/asp/complate.htm查阅ASP/S提供的IS50文档 621使用示例页面 本书已经提供了一系列的示例页面来说明所有这些组件的用法。 可以从 Wrox Web网站上下载这些实例页面,并在自己的计算机上运行。在下载 的文件的 Chapter06子目录中会找到本章所用的程序代码。 在运行示例页面之前,确保 MyInfo和 Counter组件的“全局”实例化代码已包含在缺省 Web站点的 global.asa文件中。在示例文件中提供了 global. asa文件中所需要的代码,可以将这 些代码加到现有的 global. asa文件中,不需要更换整个文件
(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 高级编程 下载
aopub.com 下载 第6章活动服务器组件 173 I-- declare instance of the ASP Counters component with application-level scope < OBJECT ID=" objcounters· RUNATE" Server· SCOPE="λpp1 ication PROGID="MSWC Counters> <l-- declare instance of the ASP MYInfo component with application-level scope <OBJECT ID-'objMyInfoRUNAT='Server SCOPE-ApplicationPROGID."MSWC MyInfo> 示例文件的主菜单页面( Default. asp)使用 Content Linking组件创建到每一个页面示例的链 接。因此,我们将首先研究这个组件,也涉及了 Ad rotator和 Counters组件的有关问题。 622 Content Linking组件 Content linking组件对网站是非常有用的工具,它提供了内容页面,或者包含对同一站点 上其他页面的链接列表的页面。它自动把当前显示页面的URL与存储在服务器里的文本文件 的页面列表匹配起来,并且能允许用户通过页面列表按正反顺序进行浏览。也就是说,即使 访问者已经在内容页面中点击了一个链接并且正在查看列表中的某一个页面,该组件仍然会 辨认出所访问的页面在列表中的位置。 因为所有详细资料均在一个文本文件中,维护网站以及页面间的链接仅仅需要编辑这个 文本文件。例如可以通过在内容链接列表文件中重新排列页面的顺序,来改变它们的显示顺 1.内容链接列表文件 内容链接列表文件包括一个简单的按显示顺序排列的页面URL列表,同时也提供了相应 的描述,用于在内容页面中显示链接文本。如果需要,还可以增加对每个页面的注释,注释 可以帮助识别链接,但对访问者来说注释是不可见的 列表文件对于每个页面包含一个文本行。每一行由URL、描述和注释所组成,各部分由 Iab字符(不是空格,否则文件将不能工作)分隔,最后用回车结束。例如: ewpages. htm New additions to our site te this weekly ffers. htm Special offers for this week update this monthly main. htm The main forum and chat area must be registered first index. htm Back to the contents page 请注意目标URL必须由一个相对的虚拟或物理的路径来说明,诸如 forumlenter htn。URL 不能使用http∥”或者“W”作为开头,如果要创建上述这样含有绝对URL的菜单, 以使用ASP建立一个重新定向页面,而且在内容链接列表文件中对其进行指定,例如,建立 个名为 redirect. asp的页面,包含如下代码 redirect the request to the site specified in the query string esponse. Clear Response. Redirect Request Querystring('url) 可以在内容链接列表文件中按下述方式使用 redirect. asp文件: redirectasp?url=http://v CyScape BrowserHawk Web Pages redirectasp?url=http://www.softartisans.com/safileupComponentPages redirectasp?url=http://www.stonebroom.com/swindex.htmStonebroomRegexPages
示例文件的主菜单页面 ( 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 下载