javabean+Jsp统计网站时间段访问数

博主最近为了这个统计,可算是把csdn得博客翻了个底朝天,要么可以统计今日的,没有历史浏览量,要么有历史浏览量,没办法统计今日的,主要还是博主之前没有遇到过,对这种统计不熟悉,下面算是博主总结得一种方法了,不过可能比较死板,如果大家有更好得方法,希望留言讨论,一起进步,好学若饥,谦卑若愚!

整体思路,是创建一个时间节点得实体类,然后通过java转XML得方式,将时间节点写入xml文件中,然后通过io流处理后,读取在jsp页面中,最后就可以访问出平时我们看到网页页脚那些统计信息了。

首先导入必备jar包

  • castor-1.2-xml.jar
  • xercesImpl.jar
  • serializer-2.7.1.jar
  • commons-logging-1.1.1.jar

对这4个jar不在此赘述了,大家应该都知道,实在不知道,问下度娘把。

然后编写工具类

创建时间节点实体类:

package com.dean.ssm.util.pageview;

import java.util.Date;

public class CountObjectInfo {
    // 总访问量合计  
    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();  

    public int getDayCount() {  
        return dayCount;  
    }  

    public int getMonthCount() {  
        return monthCount;  
    }  

    public int getTotalCount() {  
        return totalCount;  
    }  

    public int getWeekCount() {  
        return weekCount;  
    }  

    public int getYearCount() {  
        return yearCount;  
    }  

    public void setDayCount(int i) {  
        dayCount = i;  
    }  

    public void setMonthCount(int i) {  
        monthCount = i;  
    }  

    public void setTotalCount(int i) {  
        totalCount = i;  
    }  

    public void setWeekCount(int i) {  
        weekCount = i;  
    }  

    public void setYearCount(int i) {  
        yearCount = i;  
    }  

    public Date getDate() {  
        return date;  
    }  

    public void setDate(Date date) {  
        this.date = date;  
    }  

    public int getTempCount() {  
        return tempCount;  
    }  

    public void setTempCount(int i) {  
        tempCount = i;  
    }  
} 

编写逻辑处理

package com.dean.ssm.util.pageview;

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

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

public class CountXml {

    /** 在这里定义XMLCOUNT.XML的绝对路径 */  
    private String fileName = "F:\\myework\\wyin\\WebRoot\\WEB-INF\\xmlcount.xml"; 

    private static CountObjectInfo 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)))  
            CountXml.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() >= 0) {// 只有当临时访问量大于等于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 CountObjectInfo read(String fileName) throws Exception {  
        FileReader reader = new FileReader(fileName);  
        CountObjectInfo result = (CountObjectInfo) Unmarshaller.unmarshal(  
                CountObjectInfo.class, reader);  
        reader.close();  
        return result;  
    }  
}

测试

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<%@ page import="java.util.Date" %>  
<%@ page import="cn.csrc.base.count.CountXml" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>测试</title>  
</head>  
<body>   
    <%  
        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>  
</body>  
</html>

结果为 1 1 1 1 1 1则表示正确统计

最后看写入得xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<count-object-info month-count="1" total-count="1" temp-count="0" day-count="1" week-count="1" year-count="1"><date>2017-12-20T16:00:03.443+08:00</date></count-object-info>

到这里,如果结果正确,XML文件写入,那么恭喜你,统计完成了,我们不止会New

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值