两个简单网站计数器的比较

第一个:

<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="java.io.*"%>
<%!
// 读取文件
public int load(String path){
int temp = 0 ;
try{
File f = new File(path) ;
BufferedReader buf = new BufferedReader(new InputStreamReader(new FileInputStream(f))) ;
String str = buf.readLine() ;
temp = Integer.parseInt(str) ;
buf.close() ;
}catch(Exception e){}
return temp ;
}
public synchronized void save(int c,String path){ // 需要同步
try{
File f = new File(path) ;
PrintStream ps = new PrintStream(new FileOutputStream(f)) ;
ps.print(c) ;
ps.close() ;
}catch(Exception e){}
}
%>
<%
String path = getServletContext().getRealPath("/") + "count.txt" ;
int count = load(path) ;
%>
<%
if(session.isNew()){ // 如果是第一次访问
save(++count,path) ;
}
%>
<h2>您是第位<%=count%>访问者!!</h2>



第二个:

<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.math.*"%>
<html>
<head><title> 网站统计 </title></head>
<body>
<%!
BigInteger count = null ;
%>
<%!
public BigInteger load(File file){
BigInteger count = null ; // 接收数据
try{
if(file.exists()){
Scanner scan = new Scanner(new FileInputStream(file)) ;
if(scan.hasNext()){
count = new BigInteger(scan.next()) ;
}
scan.close() ;
} else { // 应该保存一个新的,从0开始
count = new BigInteger("0") ;
save(file,count) ; // 保存一个新的文件
}
}catch(Exception e){
e.printStackTrace() ;
}
return count ;
}
public void save(File file,BigInteger count){
try{
PrintStream ps = null ;
ps = new PrintStream(new FileOutputStream(file)) ;
ps.println(count) ;
ps.close() ;
}catch(Exception e){
e.printStackTrace() ;
}
}
%>
<%
String fileName = this.getServletContext().getRealPath("/") + "count.txt"; // 这里面保存所有的计数的结果
System.out.println(fileName) ;
File file = new File(fileName) ;
if(session.isNew()){
synchronized(this){
count = load(file) ; // 读取
count = count.add(new BigInteger("1")) ; // 再原本的基础上增加1。
save(file,count) ;
}
}
%>
<h2>您是第<%=count==null?0:count%>位访客!</h2>
</body>
</html>


2个页面都是用application完成的一个网站的计数器操作,每次当有新的用户来的时候,就要求记录的数字加1,在用来第一次来的时候进行计算.在WEB根目录中创建count.txt的文件.
application保存的内容可以让所有人共同访问,getServletContext()方法就是application. getRealPath方法可以取得虚拟目录对应的绝对路径.
application是ServletContext接口的对象,表示的是整个容器的上下文.

通过IO操作,读取count.txt中的数字并保存.两者的save方法基本相似,但在load方法上有所不同,第一个只是简单的读取了count.txt中的内容,而第二个在读取时判断的文件的完整性,而且使用了BigInteger作为返回类型,有利于大流量的访问统计.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值