欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP 3.0高级编程(二十六)

程序员文章站 2023-08-28 22:52:35
6.2.6 content rotator        content rotator组件像一个简化的ad...
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
<a href=mailto:feedback@wrox.com>wrox press</a>

%% 4 //this is a multi-line text string
<h4>wrox press</h4>
<ul>
       <li> language primers
       <li> advanced programming
       <li> internet applications
</ul>

%% 2
visit us on the <a href="https://www.wrox.com">world wide web</a>

这个例子说明了可以用于网页中的三个文本字符串,比率分别是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("contentmycontent.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([[i]page_path[/i]])
返回由page_path指定的网页的访问次数,如果选项page_path省略的话,返回的是当前网页的访问次数

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

reset([[i]page_path[/i]])
设置由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() + <p>);

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

图6-10  page counter组件示例页面
该网页包含的<form>段中含有两个按钮,两个按钮都把窗体提交以重新调入网页。
<form action="<% = request.servervariables("script_name") %>" method="post">
<input type="submit" value="&nbsp;&nbsp;&nbsp;"> reload this page<p>
<input type="submit" name="cmdreset" value="&nbsp;&nbsp;&nbsp;">
pagecounter.reset( )
</form>
在网页的开头,与其他的示例网页一样,在请求中查找相关的按钮名字。在本页面中,我们仅对第二个名为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的al