加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 教程 > 正文

高访问量情况下 怎样用JSP编写计数器程序

发布时间:2023-07-25 13:51:53 所属栏目:教程 来源:
导读:有时要为每一篇文章统计其点击次数,如果每一次浏览都要更新一次库的话,那性能在访问量很大的情况下,服务器的压力就会很大了,比较好一点的方法就是先将要更新的数据缓存起来,然后每隔一段时间再利用数据库的批量
有时要为每一篇文章统计其点击次数,如果每一次浏览都要更新一次库的话,那性能在访问量很大的情况下,服务器的压力就会很大了,比较好一点的方法就是先将要更新的数据缓存起来,然后每隔一段时间再利用数据库的批量处理,批量更新库。源码如下:
 
  CountBean.java
 
/*
 
* CountData.java
 
*
 
* Created on 2006年10月18日, 下午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;
 
/**
 
*
 
* @author http://www.tot.name
 
*/
 
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 2006年10月18日, 下午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 2006年10月18日, 下午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 hits=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>");
 
%>
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!