热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ASP3.0高级编程(二十六)

  6.2.6 Content Rotator组件Content Rotator组件像一个简化的Ad Rotator组件,需要提供一种内容调度文件(Content Schedule File)。该文件

  6.2.6 Content Rotator组件
Content Rotator组件像一个简化的Ad Rotator组件,需要提供一种内容调度文件(Content Schedule File)。该文件仅是一种包含文本段和HTML代码段的文本文件,Content Rotator组件可在页面中自动显示其中的一个。调度表文件可以包括任何数量的文本内容条目,并可规定比率,用以控制在返回网页中每个条目的显示频率。
1. 内容调度文件
内容进度文件的结构比Ad Rotator的调度文件简单,仅需提供要使用的各个文本字符串的列表,由前面加两个百分号(%%)的语句行说明。为了设置每个条目的比率(决定它出现在返回页面中的频率),在双百分号的后面添加了一个数字,其后还可跟一对前向斜线符(//)添加注释。如:
%% 3 // This is the first entry in the schedule text file
For more information, mail us at
Wrox Press
%% 4 //This is a multi-line text string

Wrox Press



  • Language Primers
  • Advanced Programming
  • Internet Applications

%% 2
Visit us on the World Wide Web

这个例子说明了可以用于网页中的三个文本字符串,比率分别是3、4和2,所以条目将以3/9、4/9和2/9的频率出现。注意(和ad Rotator组件一样)每个字符串的实际出现是随机的,然后经修正后获得相应的比率,如果调入网页九次,可能不会正好得到这个结果。
2. Content Rotator组件的成员
Content Rotator组件仅提供两个方法,用于从内容调度文件中检索内容,如表6-5所示:
表6-5 Content Rotator组件的方法及说明
方 法
说 明

getallcontent(schdule_file)
检索和显示schdule_file文件中的所有字符串

choosecontent(schdule_file)
检索(但不显示)来自schdule_file文件的下一个合适的内容字符串

3. 使用Content Rotator组件
为了从调度文件中获得指定段的文本和HTML,可使用对象的ChooseContent方法检索一个条目,按照内容调度文件中规定的比率。可以使用Response.Write方法将其插入到发送给客房机的输出流中。
<% 'In Vbscript:
Set objMyCOntent= Server.CreateObject("MSWC.ContentRotator")
strCOntent= objMyContent.ChooseContent("ContentRotator/content_schedule.txt")
Response.Write strContent
%>
这个代码使用了和页面在同一目录中的调度文件,如果这段代码存放在其他地方,必须注明调度文件的路径,这个路径可以是一相对于Web网站根目录的物理路径或是一个完整的虚拟路径。
ObjMyContent.ChooseContent("\content\mycontent.txt") 'relative physical path
ObjMyContent.ChooseContent("/demo/mycontent.txt") 'full virtual path
如果想显示内容调度文件中的所有内容字符串,可以使用对象的GetAllContent方法,如ChooseaContent方法的情况一样,必须提供调度文件的路径。例如下面的代码得到了内容调度文件中的所有内容并显示在网页里。注意这个方法把内容自动地插入到网页中,所以不必使用Response.Write方法,这个方法也自动地在每个条目之间加了一个水平线。
ObjMyContent.GetAllContent("mycontent.txt")
为了研究Content Rotator组件的作用,从“ASP Installable Components”主菜单打开提供的示例页面,这个页面使用前面讲过的内容调度文件。调用ChooseContent方法,并把一个条目放在页面的顶部,然后使用GetAllContent方法显示调度文件中所有条目的内容。Content Rotator组件示例页面如图6-9所示:

图6-9 Content Rotator组件示例页面

6.2.7 Page Counter组件
Page Counter组件用于统计每个网页被访问的次数,该组件定期把统计的数据存入服务器磁盘上的一个文本文件——访问次数统计数据文件(Hit Count Data File)中,所以在停机或出现错误信息,当前数据也不会丢失。
1. Page Counter组件的成员
Page Counter组件提供了向该文件增加访问次数的方法以及读取和重新设置访问计数总和的方法,如表6-6所示:
方 法
说 明

hits([Page_Path])
返回由Page_Path指定的网页的访问次数,如果选项Page_Path省略的话,返回的是当前网页的访问次数

pagehit()
增加当前网页的访问次数

reset([Page_Path])
设置由Page_Path指定的网页的访问次数为0,如果选项Page_Path省略的话,设置当前网页的访问次数为0

2. 使用Page Counter组件
下面例子使用JScript语言来说明Page Counter组件的使用,先用Server.CreateObject方法创建对象实例,然后调用Hits方法得到对当前网页的访问次数。如果访问次数达到5次,则把计数器重新设置为0,并且在网页中放置一个链接,以便向访问者通过成绩。
<% // in JScript:
var objPageCount = Server.CreateObject('MSWC.PageCounter');

//look for a command sent from the FORM section buttons

// increment the counter and display the current hit count
objPageCount.PageHit();
Response.Write('You are visitor number ' + objPageCount.Hits() + '

');

// we treat every fifth visitor as a winner
if (objPageCount.Hits() == 5) {
objPageCount.Reset(); // reset the counter
Response.Write('You\'re a lucky winner!
');
Response.Write('Go to our winners page
');
}
%>
注意在第二个Response.Write语句中,后向斜线(\)的使用是防止JScript引擎把引号看作字符串的结束。
本书提供了一个使用Page Counter组件的示例网页。然而,由于在每个示例页面里使用一个Vbscript为这个组件示例编写程序。尽管在一个ASP网页里,混用脚本语言是可能的,但在SSI的#include文件中使用脚本语言能使网页缓存出现问题,并会引起不可预测的结果。虽然脚本语言不同,但示例网页的工作方式上与上述相同。Page Counter组件示例页面如图6-10所示:

图6-10 Page Counter组件示例页面
该网页包含的段中含有两个按钮,两个按钮都把窗体提交以重新调入网页。
" METHOD="POST">
Reload this page



PageCounter.Reset( )

在网页的开头,与其他的示例网页一样,在请求中查找相关的按钮名字。在本页面中,我们仅对第二个名为cmdReset的按钮感兴趣,如果点击了该按钮,运行Page Counter组件的Reset方法,重新设置本页面的访问次数为0。
'look for a command sent from the FORM section buttons
If Len(Request.Form("cmdReset")) Then objPageCount.Reset 'reset the counter
前面看到的代码将调用PageHit方法把计数器设置为1,并显示在网页里。注意已经使用了Hits和Reset方法而没有给可选参数提供数值,所以它们都在当前网页计数器上操作,当然能够在另一个网页中使用,并可以对一些网页的统计结果汇总。

6.2.8 Permission Checker组件
Permission Checker组件用来检测用户当前正在访问网站的帐号是否允许读取某个特定文件或者访问某个资源(仅在Windows NT/2000而不是在Windows 9X)。可以用它来定制页面,这些网页中仅包含当前用户允许访问的资源的链接,这项技术对于隐藏限制访问的网页和资源是非常有用的,它可以使被限制的访问者不知道这些资源的存在,不会产生强行进入其中的企图。
1. Permission Checker组件的成员
Permission Checker组件只有一个方法,如表6-7所示:
表6-7 Permission Checker组件的方法及说明
方 法
说 明

hasaccess(file_path)
检查当前执行页面的用户帐号是否允许访问file_path指定的页面。该路径是一个网页、文件或资源的物理的或虚拟的路径。如果当前帐号允许访问,返回值为“True”,否则返回值为“False”

2. Permission Checker组件的工作过程
通常,除非特别规定,否则用户是匿名访问网页的,因此IIS本身会使用自己的Windows帐号访问网页,缺省值是IUSR_machinename(例如IUSR_WROXBOX),Permission Checker组件检查IUSR_machinename帐号是否能够访问指定的网页或资源。
然而,通过Internet Services Manager的Allow Anonymous Access选项关闭对Web网站或者对某一指定目录的匿名访问,可以强迫IIS提示用户输入一个有效用户帐号的用户名和口令,然后使用该帐号“非匿名访问”资源。
对一个网站或目录,在Internet Services Manager上的Properties对话框中的Directory Security选项卡中设定访问控制。在对话窗体中的Anonymous Access和Authentication Control中,点击Edit按钮打开Authentication Methods对话框,关闭Anonymous Access选项。设置界面如图6-11所示:

图6-11 访问权限的设置界面
当Permission Checker组件在用户用其自己的帐号(而不是IUSR_machinename)访问的网页中被实例化时,将检查其帐号是否可以访问这个指定的资源,如果不能使用匿名访问,那么所有的用户必须提供帐号细节。可以使用Windows Explorer对每个文件或资源设置指定的权限(在相应的Properties对话框中的Security选项卡中)。设置界面如图6-12所示:

图6-12 权限设置界面
3. 使用Permission Checker组件
可以使用Permission Checker组件检查当前用户是否使用HasAccess方法访问其他页面(网站上的任何页面)的权限。本书提供了一系列实例页面,可用来试验Permission Checker组件,打开此示例(从ASP Installable Components主菜单里打开),会看到网页里的三项链接,如图6-13所示:

图6-13 使用Permission Checker组件的示例页面
链接所指向的每一个页面都位于Chapter06示例目录下的PermissionChecker子目录中。Permission Checker组件检查当前用户是否有访问各个网页的权限。如果用户确实有访问这个网页的权限的话,这个网页的条目将是一个超级链接。
'create an instance of the component
Set objPermit = Server.CreateObject("MSWC.PermissionChecker")
%>


现在我们有访问三个有访问限制的网页的权限,所以这三个条目都是超级链接。然而这里不存在第四个链接(它可以被移去或是删除),因为组件不能使用当前用户(也就是IUSR_machinename)的帐号来访问它,因此不显示为超级链接。
注意这里选择仅移去超级链接但留下了链接文本,在实际情况中应删除不可访问的网页的整个条目。
如果从PermssionChecker子目录中的restricted_2.asp文件上删除Read(和任何其他的)权限,并重新调入网页,对应的条目将不显示为一个超级链接,如图6-14所示:

图6-14 删除Read权限后的页面显示

6.2.9 MyInfo组件
MyInfo组件最初是与个人Web服务器一起引入的,用于存储服务器管理员提供的个人信息。它现在可以用在ASP 3.0中,为名称/数值对,或者任何其他类型的可以表示为文本字符串的信息提供永久存储。该信息以XML格式在文本文件myinfo.xml中保存,此文件仅位于Web服务器的inetsrv目录下。在Windows 2000中,其路径为WinNT\system32\inetsrv\。
和Counter组件一样,只需创建一个简单的MyInfo组件的实例就可以使用Web网站上的所有页面均能获得其信息,确保缺省Web站点上的global.asa文件中有下面的代码:


1. 使用MyInfo组件
MyInfo组件缺省时没有属性和方法。然而可给其添加属性,简单地说,也就是赋一个名称和数值给这些属性。比如,可以添加有关工作环境和合作伙伴的信息。
<% 'in Vbscript:
objMyInfo.MyManager = "Christina Chan"
objMyInfo.MyPhOneExtension= "2851"
objMyInfo.MyCarParkingSpace = "4A-17"
objMyInfo.MyComputerName = "Priscilla"
%>
同别的组件属性一样,可以使用下面代码检索数值。
<% 'in Vbscript:
strManagerName = objMyInfo.MyManager
strPhOneExtension= objMyInfo.MyPhoneExtension
strParkingSpace = objMyInfo.MyCarParkingSpace
strComputerName = objMyInfo.MyComputerName
%>
这是一种在两个页面请求之间存储值的有用方法,不需要用户的Session对象。这也为将来可能改变的数值提供了一个存储区域,采用这些值的页面将会在下次运行时自动地采集这些变化的值,从而避免必须编辑大量的其他页面。
本书提供了一个使用MyInfo组件的简单示例,这个示例从ASP Installable Components主菜单中运行,使用刚才讨论的设置组件属性的代码,并可改变属性值,如图6-15所示:

图6-15 使用MyInfo组件的页面
首次打开页面时,创建属性时使用了一个标志变量SetDefaultValues,该变量存放在用户的Session对象中。当页面在每个会话里首次打开时,把属性参数设置成“缺省”值,之后,把此标志变量设置成Yes。在当前会话中,重新调入页面时,这个数值将不再重新设置缺省值。
'an instance of the component is already created in global.asa
If Not Session("SetDefaultValues") = "Yes" Then
'set the properties if they're not set to the default values,
'i.e. if this is the first time that the page has been run
'during the current user session.
objMyInfo.MyManager = "Christina Chan"
objMyInfo.MyPhOneExtension= "2851"
objMyInfo.MyCarParkingSpace = "4A-17"
objMyInfo.MyComputerName = "Priscilla"
'set a session flag to show that the default values hve been set
Session("SetDefaultValues") = "Yes"
End If
每次调用页面时,检查请求中的值是否是用于改变属性值的按钮的名称。这个按钮在一个包含下拉列表和文本框的上。如果发现点击了这个按钮,则从下拉列表和文本框里采集数值,然后用这些数值改变相关的属性值。
'look for a command sent from the FORM section buttons
If Len(Request.Form("cmdChange")) Then
strPropertyName = Request.Form("lstName") 'get the name of the property
strNewValue = Request.Form("txtValue") 'get the new value for the property
objMyInfo(strPropertyName) = strNewValue 'set the component property value
End If

 


本文作者:

推荐阅读
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
author-avatar
我心飞翔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有