计数器模块

       目前普遍流行的计数器可以归结为以下三类:

      (一)简单计数器

        ^_^  ^_^   当有用户登陆时,计数器的计数变量做简单的加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);

}

}

  

}

}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值