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

ASP 3.0高级编程(二十五)

程序员文章站 2022-05-23 08:56:18
6.2.4 counters        counters组件能用于创建、存储、递增和检索每个计数器的值。...
6.2.4 counters
       counters组件能用于创建、存储、递增和检索每个计数器的值。不要把它和本章后面将要介绍的page counter组件混淆,counters组件能用于支持任何种类数据的统计。
       一个计数器含有一个整数值,能通过counters组件的方法进行运算。使用set方法设置计数器的指定值,用get方法检索计数器中的值,使用increment方法使计数器的值加1,使用remove方法删除一个计数器。所有的计数器的值存储在一个名为counters.txt的文本文件中,可在counters.dll组件所在的目录中找到该文件。
1.  counters组件的成员
counters组件提供了用于维护每个计数器组件中数值的四个方法,如表6-4所示:
表6-4  counters组件方法及说明
方 法
说 明

get(counter_name)
返回指定计数器的当前值,如果此计数器先前没有创建,道德创建并设置成0,其返回值为0

increment(counter_name)
增加指定计数器的当前值,如果此计数器先前没有创建,首先创建并设置为1

remove(counter_name)
删除指定的计数器

ser(counter_name,value)
把指定计数器的值设置成参数value提供的整数值,如果此计数器先前没有创建,先创建并设定为指定值

2.  使用counters组件
由于counters.txt文件仅有一个所有组件实例都能访问的拷贝。因此,应该只创建单个的counters组件实例,并且使之对web网站的所有页面都是可用的,实现这一点的常用方法是在缺省web站点根目录下的global.asa文件中创建一个应用程序范围的实例。
采用下面程序:
<!-- declare instance of the asp counters component with application-level scope
-->
<object id="objcounters" runat="server" scope="application"
progid="mswc.counters">
</object>
可以使用counters组件对需要完成的任务创建一个新的计数器。在下面的程序中,给出了有三项选择的调查问题,并对每一种选择的回答次数进行了统计,当使用者提交包含三项选择的窗体后,将调入这个页面。假设选项通过点击submit按钮的cmdyes、cmdno和cmdmaybe来选择,其对应值分别是“是”、“否”和“可能”。
<% in vbscript”
if request.form("cmdyes") = "yes" then objcounter.increment("response_yes")
if request.form("cmdno") = "no" then objcounter.increment("response_no")
if request.form("cmdmaybe") = "maybe" then
       objcounter.increment("response_maybe")
%>
如果这是第一次收到一个指定的响应,程序将创建一个新的计数器并自动初始化为1。
计数器在使用范围上没有限制,因为counters对象创建在文件global.asa中,这意味着在虚拟应用程序或web网站中创建的任何一个页面中都是可用的,所以这个“调查计数器”可用在应用程序的任何页面上,记住单个的counters对象能提供所需的许多独立计数器,不需要创建很多counters对象实例。
在前面的ad rotator组件页面示例中,研究了如何使用counters组件存储每个广告主的点击次数,也可以在页面中使用counters组件的get方法显示当前值。
wrox press: <b><% = objcounters.get("wrox") %></b><br>
stonebroom: <b><% = objcounters.get("stonebroom") %></b><br>
xtras: <b><% = objcounters.get("xtras") %></b><br>
componentsource: <b><% = objcounters.get("compsrc") %></b><br>
four cds: <b><% = objcounters.get("fourcds") %></b><br>
lunar: <b><% = objcounters.get("lunar") %></b><br>
每次加载页面时,都自动更新计数器的当前值。然而页面也包含有一些控件能调用counters组件的其他两个方法,即删除一个计数器(相当于将其设置为0)和将计数器设置成一个指定数值,如图6-6所示:

图6-6  counters组件的使用演示
这些控件在一个<form>上,点击任何一个小的空白按钮时,此窗体便提交给同一个页面,方法与本章中的所有页面所用的几乎一样。下面的程序是为remove方法创建控件的html代码。
<form action="<% = request.servervariables("script_name") %>" method="post">

<input type="submit" name="cmdremove" value="&nbsp;&nbsp;&nbsp;">
&nbsp; counter.remove ("
<select name="lstremove" size="1">
  <option value="wrox">wrox press</option>
  <option value="stonebroom">stonebroom</option>
  <option value="xtras">xtras</option>
  <option value="compsrc">componentsource</option>
  <option value="fourcds">four cds</option>
  <option value="lunar">lunar</option>
</select> ")<p>

</form>
当载入页面时,通过检查request.form集合查看点击的按钮,如果找到了某个按钮,将运行代码的相应部分。在点击remove按钮的情况下,相应的代码是:
       if len(request.form("cmdremove")) then
  strcountername = request.form("lstremove")              get the counter name
  objcounters.remove strcountername
  response.write "removed counter <b>" & strcountername & "</b>.<p>"
end if
对于set方法,情况类似,但不仅仅需要从文本框中读取新值,而且在调用set方法之前,检查文本框中的值是否是有效值。
if len(request.form("cmdset")) then
  strcountername = request.form("lstset")              get the counter name
  strnewvalue = request.form("txtset")                   get the new value
  if isnumeric(strnewvalue) then                           if it can be converted to a number
     intnewvalue = cint(strnewvalue)                    … then convert it
     objcounters.set strcountername, intnewvalue
     response.write "set counter <b>" & strcountername & _
                    "</b> to <b>" & strnewvalue & "</b>.<p>"
  else
     response.write "<b>" & strnewvalue & "</b> is not a valid number.<p>"
  end if
end if
使用页面中的按钮调用counters对象的方法时,重新载入时会在页面顶端看到一段信息和计数器中的新值,如图6-7所示:

图6-7  调用counters对象的方法重新载入页面

6.2.5 browser capabilities组件
       创建各种web网页时面临的问题之一是,不仅仅使用asp技术创建动态网页,而且能够使用html元素和其他客户端技术,像java applets、activex控件以及最近出现的html元素。需要意识到的是,一些访问者若使用了恰好不支持它们的,那么对于精心编制的网页,访问者看到的可能是文本、图像的杂乱组合,甚至更糟糕的还有相应工作的脚本程序代码。
       这里不讨论应当如何设计支持各种不同浏览器的网页(如果想了解这方面更多的内容,可以查阅alex homer编写的,wrox出版的《professional asp techniques for webmasters》一书,书号是isn 1-861001-79-7)。然而,确实要引用某个页面时,asp和iis提供铁browser capabilities服务器组件可以用来检测浏览器所支持的相关特征。
       用户请求来自