目前普遍流行的计数器可以归结为以下三类:
(一)简单计数器
^_^ ^_^ 当有用户登陆时,计数器的计数变量做简单的加1操作, 当用户刷新页面时再加1。计数器的计数变量将在所有用户中共享, 其优点是速度快,占用服务器资源少、程序实现简单。 最大的缺点是无法反应真实的网站访问量.....
实现代码如下:
<%
int counter = 0;
synchronized void counterFun(){
counter = counter+1;
}
%>
您是本站第<%=counter%>位访问者
(二)防刷新计数器
防刷新计数器在获取用户到访时首先判断其session,通过session.isNew()赖皮判断其是否是一个新的会话, 如果是新的会话的话则访问量增加1,同时读取服务器保存访问量的文本中的值, 如果文本中的访问量大于会话中的访问量,就意味着服务器曾经重启,计数已重新开始,这时应该把访问量变量赋值为文本中的访问量。
在JSP页面中创建并调用bean:
<jsp: useBean id="counter" class="XXXXX" scope="request"></jsp:useBean>
<%
//调用counter对象的ReadFile方法来读取文件count.txt中的计数
if(session.isNew()){
String cont = counter.ReadFile("/count.txt");
//调用counter对象的ReadFile方法来将计数器加1后写入到count.txt中
counter.WriteFile("/count.txt",cont);
}else{
//只读取文本中的值而不做加1处理
String cont = counter.ReadFile("/count.txt");
}
%>
关于上面涉及到的counter.java文件就是一个简单的读取操作。 在此略去......
(三) 单用户计数器
单用户计数器在获取用户到访时首先判断其session, 通过session.isNew()来判断是否是一个新的会话, 如果是一个新的会话则读取该用户的cookie中的loginCounter值, 该值记录了该用户的访问次数, 如果该cookie不存在用户的访问则次数为1,并且在最后还要把用户的访问量重新保存到cookie的变量中, 否则对次数做加1操作。
if(session.isNew()) //如果是一个新的会话{
Cookie[] cookies = request.getCookies();
for(int i=0; i<cookies.length; i++){
Cookie count = cookies[i];
String loginCount = count.loginCount();
if(loginCount.equals("loginCount"))
int usercount = count.getValue();
}
if(usercount!=null){
usercount = usercount +1;
}else{
usercount = 0;
}
Cookie cookie = new Cookie("logincount", usercount);
response.addCookie(cookie);
}
————————附上 counter.java
public class counter extends Object{
private String currentRecord = null; //保存文本的变量
private BufferedReader file ; //用于读取文件数据
private String path; //文件完整路径名
public counter(){}
//ReadFile 方法用来读取文件filePath中的数据, 并返回这个数据
public String ReadFile(String filePath) throws FileNotFoundException{
path = filePath;
// 创建新的BufferedReader (new FileReader(path));
String returnStr = null;
try{
//读取一行数据并保存到currentRecord变量中
currentRecord = file.readLine();
}catch(IOException e){
// 错误处理
}
if(currentRecord == null){
//如果文件为空
returnStr = "没有记录";
else{
//文件不为空
returnStr = currentRecord;
}
//返回读取文件的数据
return returnStr;
}
//ReadFile方法用来将数据counter+1后写入到文件filePath中 以实现计数增长的功能
public voidWriteFile(String filePath , String counter) throws FileNotException{
path = filePath;
//将counter转换为int类型并加1
int Writstr = Integer.parseInt(coutner)+1;
try{
//创建PrintWriter对象, 用于写入数据到文件中
PrintWriter pw = new PrintWriter(new FileOutputStream(filePath));
//用文本格式打印整数Writerstr
pw.println(Writestr);
}
}
}
}