用ASP编写计数器

---（文/刘阿骥）
在网友们编写的主页之中，一般都要用计数器来统计访问量。对于计数器的编写可谓经历了几代的发展，从最初Unix上的CGI到现今Microsoft的ASP，其编程的思想越来越先进，而实现的方法却越来越简单。当初我用Perl语言写计数器时真是费尽心力，现在使用VBScript结合ASP对象很容易就编写出漂亮的计数器了。这里我想通过实例来讲讲服务器端的编程要点和ASP的两个重要对象：Application对象和FileSystemObject对象。
请看第一个count.asp
<％
′将服务器上的虚拟路径转化为真实路径
countFile=server.mapPath(″/″)＆″\″＆″count.txt″
′创建FileSystemObject对象的实例
set fso=Server.CreateObject(″Scripting.FileSystemObject″)
′打开count.txt
set file=fso.OpenTextFile(″countFile″)
′用readLine方法读取保存的访问数并赋给number
number=file.readLine
′访问数加1
number=number＋1
′显示访问数
response.Write(″你是第″＆number＆″位访问者！″)
′将新的访问数写回count.txt文件
set file=fso.createTextFile(″countFile″,true)
file.writeLine(number)
′关闭文件
file.close
％> 　　当客户端提出对count.asp的浏览请求时，该asp程序执行，从服务器上读出count.txt文件内保存的访问数赋给number变量，将number加一然后显示出来，再写回到count.txt文件中。但若有几人同时请求该页时就会发生错误，而且每次请求服务器端均进行一次文件读写，在访问量加大时就会给服务器带来严重的负担，那么有没有效率更高的方法呢？答案是肯定的，ASP提供了一个叫作Application的内部对象。将变量赋与Application作用域，存储到Application对象中，这样所有的用户均可访问该变量。当Web服务器(IIS或PWS)启动后,在第一次请求页面时将触发Application_onStart()事件，当服务器关闭时将触发Application_onEnd()事件。注意，OnStart与onEnd事件需写在一个名为Global.asa的文件中（可用写字本创建，并且一定要与count.asp放在同一目录下）。好了,请看改进后的计数器范例。
Global.asa文件：
<Script language =″Vbscript″ Runat=″server″>
sub Application_onStart()
countFile=server.mapPath(″/″)＆″\″＆″count.txt″
set fso=Server.CreateObject(″Scripting.FileSystemObject″)
set file=fso.OpenTextFile(″countFile″)
′读取访问数并赋给Application变量number
Application(″number″)=file.readLine
file.close
end sub
sub Application_onEnd()
countFile=server.mappath(″/″)＆″\″＆″count.txt″
set fso=Server.CreateObject(″Scripting.FileSystemObject″)
set file=fso.CreateTextFile(″countFile″,true)
′使用writeLine方法写入当前值
file.writeLine(Application(″number″))
file.close
end sub
</script>
以上就是Global.asa的全部内容,下面是count.asp的内容，它很简单，就是将Application(″number″)的值加一并显示出来就行了，为了避免多用户同时对Application(″number″)的值进行操作而导致混乱，采用Lock和Unlock方法。
count.asp程序：
<％
Application.Lock
Application(″number″)=Application(″number″)＋1
Applicaiotn.Unlock
response.Write(″你是第″＆number＆″位访问者！″)
％>
这样，这个计数器已经比较完善了。希望大家的网页都能精彩起来。我的E－mail:bad_boy2@21cn.com。