我要啦免费统计

微蓝领域

我的学习档案馆
posts - 19, comments - 57, trackbacks - 0, articles - 57
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

JSP中年、日、月,周访问量统计方法

Posted on 2007-08-09 14:11 hilor 阅读(2890) 评论(15)  编辑  收藏 所属分类: J2EE
   学习笔记:年、日、月,周访问量统计
    看了champion的文章《灵活的计数器的设计与实现》与源码,(这篇文章在 http://champion.ewuxi.com/old/opensource/my/count.htm),就做了这个练习。用session来计数,它是将访问量保存在一个xml文件中,读写xml文件用的是Castor。

一、这是jsp调用页testcount.jsp

<%@ page import="java.util.Date" %>
<%@ page import="count.CountXml" %>

计算器测试<br>
<%
       CountXml xmlcount=CountXml.getInstance();
  
     if (session.isNew()){
      xmlcount.addcount(new Date());//增加访问量
      int n =xmlcount.getTotalCount();//取总访问量 
      String count=Integer.toString(n);
      session.putValue("count",count); 
      
     } 

%>
您是第<font color="red"><%=session.getValue("count")%></font>位访问者 <br>  
    
总访问量:  <%=xmlcount.getTotalCount() %><br>
本年访问量:<%=xmlcount.getYearCount() %><br>
本月访问量:<%=xmlcount.getMonthCount() %><br>
本周访问量:<%=xmlcount.getWeekCount() %><br>
本日访问量:<%=xmlcount.getDayCount() %><br>

二、用到的两个类
1、CountXml.java

package count;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.util.Properties;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;


import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;

public class CountXml{
        private String fileName = "h:\\Tomcat 5.0\\webapps\\zz3zcwbwebhome\\WEB-INF\\xmlcount.xml";
        private static CountObjectInf obj=null;
        private static CountXml instance=null;
       
         public static CountXml getInstance(){
             if(instance==null){
                     instance=new CountXml();
              }
              return instance;
          }

private CountXml() {
         try{
              obj=read(fileName);
         }catch(Exception e){
              System.out.println(e);
         }
         

}

     public int getTotalCount(){
         return obj.getTotalCount();
     }

     public int getDayCount() {
return obj.getDayCount();
}


public int getMonthCount() {
return obj.getMonthCount();
}


public int getWeekCount() {
return obj.getWeekCount();
}


public int getYearCount() {
return obj.getYearCount();
}

public synchronized void addcount(Date da){//比较日期增加计数

             if (new SimpleDateFormat("yyyy-MM-dd").format(this.obj.date)
                           .equals(new SimpleDateFormat("yyyy-MM-dd").format(da)))
                this.obj.setDayCount(this.obj.getDayCount() + 1);
            else
                this.obj.setDayCount(1);

            if (new SimpleDateFormat("yyyy-MM").format(this.obj.date)
                            .equals(new SimpleDateFormat("yyyy-MM").format(da)))
                this.obj.setMonthCount(this.obj.getMonthCount() + 1);
            else
                obj.setMonthCount(1);

            Calendar ca = Calendar.getInstance();
            ca.setTime(da);
            ca.setFirstDayOfWeek(Calendar.MONDAY);

            if (ca.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY && !new SimpleDateFormat("yyyy-MM-dd").format(this.obj.date).equals(new SimpleDateFormat("yyyy-MM-dd").format(da)))
                 obj.setWeekCount(1);
            else
                 obj.setWeekCount(obj.getWeekCount() + 1);

            if (new SimpleDateFormat("yyyy").format(this.obj.date)
                         .equals(new SimpleDateFormat("yyyy").format(da)))
                this.obj.setYearCount(this.obj.getYearCount() + 1);
           else
                obj.setYearCount(1);
           obj.setDate(da);

   obj.setTotalCount(obj.getTotalCount()+1); 
           obj.setTempCount(obj.getTempCount()+1);
           if(obj.getTempCount()>=20){//只有当临时访问量大于等于20时才保存一次
                     obj.setTempCount(0);//临时计数器置0
                      write(fileName);
                      
           }
        }

private void write(String fileName) {
                try {
                        FileWriter writer = new FileWriter(fileName);
                        Marshaller.marshal(obj, writer);
                        writer.close();
                } catch (Exception e) {
                        System.out.println(e);

                }
        }

        private CountObjectInf read(String fileName) throws Exception {
                FileReader reader = new FileReader(fileName);
                CountObjectInf result = (CountObjectInf) 

Unmarshaller.unmarshal(CountObjectInf.class, reader);
                reader.close();
                return result;
         }
}

2、

package count;

import java.util.Date;
public class CountObjectInf {
// 总访问量合计
protected int totalCount = 0;
//日访问量
protected int dayCount = 0;
//周访问量
protected int weekCount = 0;
// 月访问量
protected int monthCount = 0;
//年访问量
protected int yearCount = 0;

//临时访问量
protected int tempCount=0;

protected Date date =new Date();

/**
 * @return
 */
public int getDayCount() {
return dayCount;
}

/**
 * @return
 */
public int getMonthCount() {
return monthCount;
}

/**
 * @return
 */
public int getTotalCount() {
return totalCount;
}

/**
 * @return
 */
public int getWeekCount() {
return weekCount;
}

/**
 * @return
 */
public int getYearCount() {
return yearCount;
}

/**
 * @param i
 */
public void setDayCount(int i) {
dayCount = i;
}

/**
 * @param i
 */
public void setMonthCount(int i) {
monthCount = i;
}

/**
 * @param i
 */
public void setTotalCount(int i) {
totalCount = i;
}

/**
 * @param i
 */
public void setWeekCount(int i) {
  weekCount = i;
}

/**
 * @param i
 */
public void setYearCount(int i) {
  yearCount = i;
}



/**
 * @return
 */
public Date getDate() {
  return date;
}

/**
 * @param date
 */
public void setDate(Date date) {
  this.date = date;
}

/**
 * @return
 */
public int getTempCount() {
   return tempCount;
}

/**
 * @param i
 */
public void setTempCount(int i) {
  tempCount = i;
}

}

评论

# re: JSP中年、日、月,周访问量统计方法  回复  更多评论   

2007-08-29 16:48 by 鱼中鱼
你有这个包没呀,发下:
org.exolab

# re: JSP中年、日、月,周访问量统计方法  回复  更多评论   

2007-08-29 17:31 by hilor
@鱼中鱼
不好意思, 这个包我没有.在网上搜了一下,找到相关网址http://openejb.exolab.org/
不过我打不开这个网页, 无法给你答复..
实际上可以换种方法来实现XML的操作,而在具体的应用中应该是保存在数据库中的... 你可以试试, 如果有问题的话可以发邮件给我TO:hilor.l@163.com

# re: JSP中年、日、月,周访问量统计方法  回复  更多评论   

2008-03-04 21:19 by Amayer
学习了,不过为什么要保存在XML文件中呢?保存在文本文件不是更好

# re: JSP中年、日、月,周访问量统计方法  回复  更多评论   

2008-04-05 18:54 by xiyuc
谢谢你的东西!

# re: JSP中年、日、月,周访问量统计方法  回复  更多评论   

2008-11-28 20:56 by asdf
jar包下载地址:http://dist.codehaus.org/castor/1.2/castor-1.2-xml.jar

或者在这个地址:http://www.castor.org/download.html#Latest-Stable-Release

# re: JSP中年、日、月,周访问量统计方法  回复  更多评论   

2009-01-18 15:24 by mcc
请问xmlcount.xml需要进行初始化么
因为的程序老是会报错
java.lang.NullPointerException
at com.resume.common.CountXml.addcount(CountXml.java:73)

# re: JSP中年、日、月,周访问量统计方法[未登录]  回复  更多评论   

2009-04-03 16:47 by 程序人生
楼上的你的路径保存一定是错了,不能自己随便设置的,必须要求是在工作中,也就是tomcat目录下的,你要按照楼主所给的路径格式写,我试过了,自己设置的路径框架在解释的时候它不识别,总是读取为空!

# re: JSP中年、日、月,周访问量统计方法[未登录]  回复  更多评论   

2009-04-03 16:52 by 程序人生
xmlcount.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<xml-body>

</xml-body>

# re: JSP中年、日、月,周访问量统计方法[未登录]  回复  更多评论   

2009-04-03 17:51 by 程序人生
经过我再三的测试,发现缺少配置文件初始化参数,根本无法保存配置参数
楼主居然忘记把xml配置信息发出来了,这是个废弃的程序,好比给你一把很好用的车,居然没给你钥匙一样,大家还是走路吧,别开车了,扔了!
java.lang.RuntimeException: Could not instantiate serializer org.apache.xml.serialize.XMLSerializer: java.lang.ClassNotFoundException: org.apache.xml.serialize.XMLSerializer

连配置文件都没写,也贴出来,真以为时间不值钱啊

# re: JSP中年、日、月,周访问量统计方法  回复  更多评论   

2010-01-08 09:17 by
共享一下

xmlcount.xml 配置文件的代码吧。不然没法用。

# re: JSP中年、日、月,周访问量统计方法  回复  更多评论   

2010-01-08 09:26 by
楼主。麻烦给发一下。xmlcount.xml配置文件的代码。

chailinglu_java@163.com

谢谢。

# re: JSP中年、日、月,周访问量统计方法  回复  更多评论   

2010-10-29 10:45 by 主人
怎么没有看到回复呀,xml里面的内容到底是什么呀?

# re: JSP中年、日、月,周访问量统计方法  回复  更多评论   

2010-11-11 16:08 by folcan
初使的xmlcount.xml

<?xml version="1.0" encoding="UTF-8"?>
<xml-body>

</xml-body>

--------serializer.jar和xerceslmpl.jar一定要引入进来,要不然你效果可以实现,但是文件会写不进去,这样服务器关掉之后就取不到数据了。XMLCOUNT.XML里面会是空的

# re: JSP中年、日、月,周访问量统计方法  回复  更多评论   

2013-04-05 18:53 by 洛阳女儿
可以使用

# re: JSP中年、日、月,周访问量统计方法  回复  更多评论   

2013-05-24 17:12 by 帅帅华北
楼主给的castor-1.2-xml.jar包不行,我导进去访问的时候就出错了,于是我在网上下的castor-xml.jar就行了,楼主能不能解决一楼的问题,急等

只有注册用户登录后才能发表评论。


网站导航: