Java统计用户年/月/周/日网站访问量

时间:2024-04-16 21:14:51

 

一:准备工作,引入相关依赖:

  

 

二:运行效果图:

下一次访问

三:具体代码如下

 (1):CountObjectInfo.java

 1 package cn.csrc.base.count;
 2 
 3 import java.util.Date;
 4 
 5 public class CountObjectInfo {
 6 
 7     // 总访问量合计
 8     protected int totalCount = 0;
 9     // 日访问量
10     protected int dayCount = 0;
11     // 周访问量
12     protected int weekCount = 0;
13     // 月访问量
14     protected int monthCount = 0;
15     // 年访问量
16     protected int yearCount = 0;
17     
18     // 临时访问量
19     protected int tempCount = 0;
20 
21     protected Date date = new Date();
22 
23     public int getDayCount() {
24         return dayCount;
25     }
26 
27     public int getMonthCount() {
28         return monthCount;
29     }
30 
31     public int getTotalCount() {
32         return totalCount;
33     }
34 
35     public int getWeekCount() {
36         return weekCount;
37     }
38 
39     public int getYearCount() {
40         return yearCount;
41     }
42 
43     public void setDayCount(int i) {
44         dayCount = i;
45     }
46 
47     public void setMonthCount(int i) {
48         monthCount = i;
49     }
50 
51     public void setTotalCount(int i) {
52         totalCount = i;
53     }
54 
55     public void setWeekCount(int i) {
56         weekCount = i;
57     }
58 
59     public void setYearCount(int i) {
60         yearCount = i;
61     }
62 
63     public Date getDate() {
64         return date;
65     }
66 
67     public void setDate(Date date) {
68         this.date = date;
69     }
70 
71     public int getTempCount() {
72         return tempCount;
73     }
74 
75     public void setTempCount(int i) {
76         tempCount = i;
77     }
78 
79 }

(2):CountXml.java:

  1 package cn.csrc.base.count;
  2 
  3 import java.io.FileReader;
  4 import java.io.FileWriter;
  5 import java.text.SimpleDateFormat;
  6 import java.util.Calendar;
  7 import java.util.Date;
  8 
  9 import org.exolab.castor.xml.Marshaller;
 10 import org.exolab.castor.xml.Unmarshaller;
 11 
 12 public class CountXml {
 13 
 14     /** 在这里定义XMLCOUNT.XML的绝对路径,注意此处代码要修改的哦 */
 15     private String fileName = "D:\\mytools\\eclipse_new\\D\\workspace\\requestCount\\WebContent\\WEB-INF\\xmlcount.xml";
 16 
 17     private static CountObjectInfo obj = null;
 18 
 19     private static CountXml instance = null;
 20 
 21     public static CountXml getInstance() {
 22         if (instance == null) {
 23             instance = new CountXml();
 24         }
 25         return instance;
 26     }
 27 
 28     private CountXml() {
 29         try {
 30             obj = read(fileName);
 31         } catch (Exception e) {
 32             System.out.println(e);
 33         }
 34 
 35     }
 36 
 37     public int getTotalCount() {
 38         return obj.getTotalCount();
 39     }
 40 
 41     public int getDayCount() {
 42         return obj.getDayCount();
 43     }
 44 
 45     public int getMonthCount() {
 46         return obj.getMonthCount();
 47     }
 48 
 49     public int getWeekCount() {
 50         return obj.getWeekCount();
 51     }
 52 
 53     public int getYearCount() {
 54         return obj.getYearCount();
 55     }
 56     
 57     public int getTempCount() {
 58         return obj.getTempCount();
 59     }
 60 
 61     public synchronized void addcount(Date da) {// 比较日期增加计数
 62         if (new SimpleDateFormat("yyyy-MM-dd").format(this.obj.date).equals(
 63                 new SimpleDateFormat("yyyy-MM-dd").format(da)))
 64             this.obj.setDayCount(this.obj.getDayCount() + 1);
 65         else
 66             this.obj.setDayCount(1);
 67 
 68         if (new SimpleDateFormat("yyyy-MM").format(this.obj.date).equals(
 69                 new SimpleDateFormat("yyyy-MM").format(da)))
 70             this.obj.setMonthCount(this.obj.getMonthCount() + 1);
 71         else
 72             obj.setMonthCount(1);
 73 
 74         Calendar ca = Calendar.getInstance();
 75         ca.setTime(da);
 76         ca.setFirstDayOfWeek(Calendar.MONDAY);
 77 
 78         if (ca.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY
 79                 && !new SimpleDateFormat("yyyy-MM-dd").format(this.obj.date)
 80                         .equals(new SimpleDateFormat("yyyy-MM-dd").format(da)))
 81             obj.setWeekCount(1);
 82         else
 83             obj.setWeekCount(obj.getWeekCount() + 1);
 84 
 85         if (new SimpleDateFormat("yyyy").format(this.obj.date).equals(
 86                 new SimpleDateFormat("yyyy").format(da)))
 87             this.obj.setYearCount(this.obj.getYearCount() + 1);
 88         else
 89             obj.setYearCount(1);
 90             obj.setDate(da);
 91 
 92         obj.setTotalCount(obj.getTotalCount() + 1);
 93         obj.setTempCount(obj.getTempCount() + 1);
 94         if (obj.getTempCount() >= 0) {// 只有当临时访问量大于等于20时才保存一次
 95             obj.setTempCount(0);// 临时计数器置0
 96             write(fileName);
 97         }
 98     }
 99 
100     private void write(String fileName) {
101         try {
102             FileWriter writer = new FileWriter(fileName);
103             Marshaller.marshal(obj, writer);
104             writer.close();
105         } catch (Exception e) {
106             System.out.println(e);
107 
108         }
109     }
110 
111     private CountObjectInfo read(String fileName) throws Exception {
112         FileReader reader = new FileReader(fileName);
113         CountObjectInfo result = (CountObjectInfo) Unmarshaller.unmarshal(
114                 CountObjectInfo.class, reader);
115         reader.close();
116         return result;
117     }
118 
119 }

(3):具体页面index.jsp:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"  
 2     pageEncoding="UTF-8"%>  
 3 <%@ page import="java.util.Date" %>  
 4 <%@ page import="cn.csrc.base.count.CountXml" %>    
 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 6 <html>
 7 <head>
 8 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 9 <title>统计用户年/月/周/日网站访问量测试</title>
10 </head>
11 <body>
12     浏览器访问测试
13     <br>
14     <%
15         CountXml xmlcount = CountXml.getInstance();
16         if (session.isNew()) {
17             xmlcount.addcount(new Date());//增加访问量
18             int n = xmlcount.getTotalCount();//取总访问量 
19             String count = Integer.toString(n);
20             session.putValue("count", count);
21         }
22     %>
23     您是第<font color="red"><%=session.getValue("count")%></font>位访问者 <br>  
24     总访问量:  <%=xmlcount.getTotalCount() %><br>
25     本年访问量:<%=xmlcount.getYearCount() %><br>
26     本月访问量:<%=xmlcount.getMonthCount() %><br>
27     本周访问量:<%=xmlcount.getWeekCount() %><br>
28     本日访问量:<%=xmlcount.getDayCount() %><br>
29     临时访问量:<%=xmlcount.getTempCount()%><br>
30 </body>
31 </html>

(4):xmlcount.xml文件的初始内容如下: (放在WEB_INF目录下)

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

至此就结束了!