千家信息网

JSP如何实现访问量计数

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,这篇文章将为大家详细讲解有关JSP如何实现访问量计数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。有时要为每一篇文章统计其点击次数,如果每一次浏览都要更新一次库的话
千家信息网最后更新 2024年11月26日JSP如何实现访问量计数

这篇文章将为大家详细讲解有关JSP如何实现访问量计数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

有时要为每一篇文章统计其点击次数,如果每一次浏览都要更新一次库的话,那性能在访问量很大的情况下,服务器的压力就会很大了,比较好一点的方法就是先将要更新的数据缓存起来,然后每隔一段时间再利用数据库的批量处理,批量更新库。

那么下面本JSP教程提供源码如下:

CountBean.java   /*  * CountData.java  *  * Created on 2009年6月30日, 下午4:44  *  * To change this template, choose Tools | Options and locate the template under  * the Source Creation and Management node. Right-click the template and choose  * Open. You can then make changes to the template in the Source Editor.  */    package com.tot.count;   /**  *  *   */  public class CountBean {   private String countType;   int countId;   /** Creates a new instance of CountData */   public CountBean() {}   public void setCountType(String countTypes){  this.countType=countTypes;   }   public void setCountId(int countIds){  this.countId=countIds;   }   public String getCountType(){  return countType;   }   public int getCountId(){  return countId;   }  }    CountCache.java   /*  * CountCache.java  *  * Created on 2009年6月30日, 下午5:01  *  * To change this template, choose Tools | Options and locate the template under  * the Source Creation and Management node. Right-click the template and choose  * Open. You can then make changes to the template in the Source Editor.  */   package com.tot.count;  import java.util.*;  /**  *  * @author http://www.tot.name  */  public class CountCache {   public static LinkedList list=new LinkedList();    /** Creates a new instance of CountCache */   public CountCache() {}   public static void add(CountBean cb){  if(cb!=null){   list.add(cb);  }   }  }    CountControl.java    /*   * CountThread.java   *   * Created on 2009年6月30日, 下午4:57   *   * To change this template, choose Tools | Options and locate the template under   * the Source Creation and Management node. Right-click the template and choose   * Open. You can then make changes to the template in the Source Editor.   */   package com.tot.count;  import tot.db.DBUtils;  import java.sql.*;  /**  *  * @author http://www.tot.name  */  public class CountControl{    private static long lastExecuteTime=0;//上次更新时间    private static long executeSep=60000;//定义更新间隔时间,单位毫秒   /** Creates a new instance of CountThread */   public CountControl() {}   public synchronized void executeUpdate(){  Connection conn=null;  PreparedStatement ps=null;  try{   conn = DBUtils.getConnection();    conn.setAutoCommit(false);   ps=conn.prepareStatement("update t_news set hitshits=hits+1 where id=?");   for(int i=0;i﹤CountCache.list.size();i++){  CountBean cb=(CountBean)CountCache.list.getFirst();  CountCache.list.removeFirst();   ps.setInt(1, cb.getCountId());  ps.executeUpdate();⑴  //ps.addBatch();⑵   }   //int [] counts = ps.executeBatch();⑶   conn.commit();  }catch(Exception e){   e.printStackTrace();  } finally{  try{   if(ps!=null) {  ps.clearParameters();  ps.close();  ps=null;  }   }catch(SQLException e){}   DBUtils.closeConnection(conn);   }  }  public long getLast(){   return lastExecuteTime;  }  public void run(){   long now = System.currentTimeMillis();   if ((now - lastExecuteTime) ﹥ executeSep) {  //System.out.print("lastExecuteTime:"+lastExecuteTime);  //System.out.print(" now:"+now+"\n");  // System.out.print(" sep="+(now - lastExecuteTime)+"\n");  lastExecuteTime=now;  executeUpdate();   }   else{  //System.out.print("wait for "+(now - lastExecuteTime)+" seconds:"+"\n");   }  }  }  //注:如果你的数据库驱动支持批处理,那么可以将⑵,⑶标记的代码前的注释去掉,同时在代码⑴前加上注释    类写好了,下面是在JSP中如下调用。   ﹤%  CountBean cb=new CountBean();  cb.setCountId(Integer.parseInt(request.getParameter("cid")));  CountCache.add(cb);  out.print(CountCache.list.size()+"﹤br﹥");  CountControl c=new CountControl();  c.run();  out.print(CountCache.list.size()+"﹤br﹥");  %﹥

关于"JSP如何实现访问量计数"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

0