载 第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.使用元素 同样可以使用常规的元素创建一个对象,该方法同样适用于在Web浏览器页面 中创建对象。ASP支持HTML元素的特殊实现,而且我可以使用这一方法在页面中 放置一个对象。要在普通的asp文件中定义一个组件或脚本对象的实例,使用下面语句 另一方面,可以使用对象的 CLASSID取代“友好名”或 PROGID 我们使用 SCOPE属性来设定对象的范围,选项是“ SESSION”、“ APPLICATION”和 “PAGE”。如果在普通的asp文件中使用元素,那么必须同时使用“PAGE”属性, 并忽略 SCOPE属性,因为创建的对象只能在它被实例化的页面中使用。如果在 global. asp文件 中使用元素,则所创建的对象可在当前会话或整个应用程序中使用,因此 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. 使用元素 同样可以使用常规的元素创建一个对象,该方法同样适用于在 We b浏览器页面 中创建对象。A S P支持H T M L 元素的特殊实现,而且我可以使用这一方法在页面中 放置一个对象。要在普通的 . 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文件中使用元素,那么必须同时使用“ PA G E”属性, 并忽略S C O P E属性,因为创建的对象只能在它被实例化的页面中使用。如果在 g l o b a l . a s p文件 中使用元素,则所创建的对象可在当前会话或整个应用程序中使用,因此 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方 去或元素中使用错误的对象 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方 法或元素中使用错误的对象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 示例文件的主菜单页面( 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 下载
174s:;商程 Chinapub.com 下载 2. Content Linking组件的成员 Content Linking组件提供了八种方法,如表6-1所示。这些方法能够检索来自内容链接列 表文件的条目,既能相对于当前页面检索条目,也可以使用索引号检索绝对条目。第一个条 目的索引号是1 表6-1 Content Linking组件的方法及说明 GetListCount(links file) 返回文件 links file中条目的数量 GetListIndex(links file) 返回文件 links 当前页面的索引号 GetNextURLlinks file) 返回文件 links file中下个页面的URL GetNextDescription( links file) 返回文件 links file中下个页面的描述 GetPreviousURL(links file) 返回文件 links file中前一个页面的URL Get Previous Description(links file 返回文件 links_file中前一个页面的描述 GetNthURL(inks file, n) 返回文件 links filel中第n个页面的URL GetNthDescription(links file, n) 返回文件 links file中第n个页面的描述 如果当前页面不在内容链接列表文件中,则 Getlistlndex返回0 GetNextURL和 GetNextDescription返回列表文件中最后一个页面的URL和描述。 Get PreviousURL和 Get Previous Description返回列表文件中第一个页面的URL和描述。 3.使用 Content linking组件 旦创建了自己的内容链接文件,就可以把该组件添加到页面中。这里有一个典型的示 例,它遍历内容链接文件中的所有条目,并且创建一个页面列表(以超链接表示页面)。 : 'in VBScript: Set objNextLink Server Createobject(MSWC Nextlink get the number of entr in the menu file intcount s objNextLink stCount('contlink. txt) loop through the entries 和标记之间,使用 Content Linking对象的 GetListCount方法查找在内容链接列表文件有多少条目。然后再遍历这 些条目,对于每一个条目在页面中放入一个标记,后面跟着一个标记。HREF属性的 值从列表文件中使用 GetnthURL方法检索得到,用作链接文本的描述使用 GetNth Description 方法 法得到 注意,内容列表文件和使用它的ASP页面应处在同一文件夹中。否则,应提供一个相对 物理路径或一个完整的虚拟路径,如下所示:
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对象。在普通的 和标记之间,使用 Content Linking对象的G e t L i s t C o u n t方法查找在内容链接列表文件有多少条目。然后再遍历这 些条目,对于每一个条目在页面中放入一个 标记,后面跟着一个标记。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 高级编程 下载
Chinapub.com 第6章活动展多器组件175 下载 intcount objNextLink. GetListcount(links \contlink txt')'physical pat intcount objNextLink. GetListcount(/demo/contlink txt)'virtual path (1)创建一个内容页面 我们已使用 Content Linking组件为本章提供的示例创建了菜单页面。 Chapter06文件夹中 的页面 Default. htm采用上述代码创建菜单,如图6-2所示。 The ASP Installable Components This menu is created using the Content Linking Component Uhang the Ad Rotator and co nters Component he content of the file contin txt that dafnes the monu B: pagecounte 1,雅 )sing the Tools ccomponent g the Logging Utility Component The cyscape Brow softartisan. coa 图6-2使用 Content Linking组件创建的菜单页面 可以看到内容链接列表文件的内容显示在链接的下面,我们使用 FileSystemObject对象完 成这一工作 create an instanc a Fil mobject object open the text file as a Textstream object Set objrstream s objFSO. OpenTextFile(Server MapPath('contlink txt), Forreading esponse. Write objTstream ReadAll read the whole file and put bitstream. Close 如果你编辑了 contlink txt文件,下次再次调用这个页面时,会看到菜单的条目发生了变化 注意文件中的最后三个条目,这三个条目使用前面介绍的 redirect. asp技术,把绝对(而不是相 对)的URL插入到列表中 (2)浏览这些页面 创建一个 Content Linking组件实例并且使用它的一个方法时,将把当前页面的URL与指定 的内容链接列表文件中的条目相匹配。不仅能用该组件创建一个内容列表(就像刚看到的那样), 而且当在浏览器上打开其中一个页面时,可以用该组件对列表中的各个页面进行导航。 意味着可以用超链接或按钮从这些页面中的一个移到另一个。例如,可以给页面添加
(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 下载
176 ASP3高级编程 Chinapub.com 下载 Next和Back按钮,通过使用 GetNextURL和 Get PrevIouSURL方法能知道列表中的哪一个页面是 前一个,哪一个页面是下一个。另一方面,能用 GetnthURL方法跳到列表中的任何页面,用 Getlistlndex方法能知道当前页面在列表中的位置。 下面是一段给页面添加Next和Back按钮的代码,我们要做的只是把这段程序放在内容链 接文件所列出的每一页中,或者用SSI的# include指令将它插入其中 ! -- need a form to force Navigator to display the buttons--> 'i' ITLE=Go to ' '"> End if If intThisPage objNextLink. GetListcount(strListFile)Then 'can go forward TITLE"Go to ' End工f 第一步是创建 Content Linking组件,然后把列表文件名存入一个变量中,以便后面在创建 页面里的客户端 JScript代码时能够使用这个列表文件。另外这样做也便于页面的维护,因为 如果想使用一个不同文件名仅需在一个地方改变就可以了 现在让我们了解一下在链接列表中所处的位置。 Getlistlndex方法提供当前页面的索引号, 从列表中的第一页开始。如果当前页面的索引号比1大,那么可以后退,所以我们在页面中创 建Back按钮。如果当前页面的索引号比列表中的项数少,创建Next按钮。页面中总是包括一 个Home按钮,以便访问者在任何时候都能轻易地返回到内容页面 如果打开列在主菜单中的页面之一的话,将会看到使用这项技术在每个页面上创建的 系列导航按钮,创建按钮的代码在文件 contlinkbuttons.inc中,可用# include指令将它插入每个 页面中。图6-3所示为带有按钮的界面。 在图6-3中有三个按钮,使用 GetPreviousDescription方法获得上个页面的链接文本,并把 这个文本放入Back按钮的 TITLE属性中,作为弹出的提示
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 高级编程 下载
aopub.com 第6章活动服务器组件 177 下载 The MyInfo Component These are the aurrent properties of the MyInfo object Change a properties value Mhc國 图6-3带有按钮的界面 'i TTLE=“Goto"> Next按钮采用 GetNextDescription方法完成类似的工作。 (3)用 JavaScipt跳转 这些导航按钮使用 JavaScript(而不是Ⅴ SCript)装载新页面,这样就能够和大多数现代浏 器兼容。例如Back按钮包含下面的属性 ONCLICK"location. href=1 当页面的HTML版本由ASP创建时,在标记中的表达式用其数值取代,所以发往 浏览器的网页看起来如下所示: ONCLICK='locationhref='permissionchecker asp'i 为什么选择使用变量来表示内容链接列表文件的名字?其原因是在单个语句中包括一个 层的嵌套引用是非常麻烦的 注意浏览器的缺省语言是 Javascript(或I中的 JScript)),而不是Ⅴ SCript,通过使 用 JavaScript,可以避免在 On click代码中必须提供 LANGUAGE参数,同时对非浏 览器提供兼容性 623 Ad rotator组件 d rotator组件允许浏览器在引用ASP页面时每次显示不同的图像,这项技术经常用在显 示广告的站点上。每次打开或重新载入页面时,ASP采用“旋转调度文件”( rotator schedule file)中的信息选择一副图像,并插入网页中。然而 Ad rotator组件能做更复杂的工作,它可以 把图像设置成超级链接而不是一副静止的图像,并能记录用户对每个广告的点击次数 在本章所介绍的组件中, Ad rotator组件可能是最难使用的,因为它涉及几个不同的文件 在查看每个文件之前,图6-4所示的工作过程总览可能有助于了解它们之间的组合方式 访问者可以浏览页面中由旋转调度文件指定的广告。通常这是个超级连接,并且对其点 击会载入一个重定向文件。这是个常规的ASP页面,能记录用户对文件的操作或点击计数, 然后重新定向到相应的广告主的网站
图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 下载
178 ASP3高级编程 Chinaopub.com 下载 旋转调度 访问者加载页 广告图像 点击广告 重定向文件 广告主的站点 图6-4 Ad rotator组件的工作过程总览 1.旋转调度文件 Ad rotator组件依赖于该文件来指定显示的广告或图像。这个文件包括每个图像文件的名 字、显示的尺寸大小以及显示时间的相对百分数。该文件分为两部分,由一个仅含有一个星 号(*)的行分隔 文件格式如下: bordER border adHomeuRL impressions 其中 ·URL是执行重新定向的ASP文件或程序的虚拟路径及名称。 idh和 height定义了页面中广告条的大小(以像素为单位),缺省值为440×60 border规定了广告条边界的宽度(以像素为单位),缺省值为1,无边界时为0 第一部分是可选的,设置应用于该文件中所有广告条的缺省值。这给设置所有图像的参 数提供了一种方法,边界宽度可以使用 Ad rotator组件中的 border属性来设置。如果忽略了 项或多项此类任选参数,而且没有明确设置对象属性,那么参数就使用其本身的缺省值。如 果忽略所有这些参数,仍需包含“*”作为文件的第一行 第二部分,即“*”后的部分,必须存在于该文件中,它提供了各个广告条的细节。对于 每个广告条,下面四个参数要重复使用。这些参数是 · adUR,是广告图像文件的虚拟路径和文件名 adHomeURL,是广告跳转到的URL,连字符(-)表明该广告条没有链接 text,浏览器不支持图形文件时显示的文本。 Impressions,是一个整数,指明了此广告条显示的相对时间或时间比率,例如一个文件 包含三个广告条,而且它们的 Impressions值分别设置为4、6和10,那么表明返回的页面 中有20%可能出现第一个广告条,30%出现第二个广告条,50%出现第三个广告条。这
图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页 点击广告 重定向文件 广告主的站点 广告图像 旋转调度 文件