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

二:运行效果图:

下一次访问

三:具体代码如下

 (1):CountObjectInfo.java

 package cn.csrc.base.count;

 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;
} }

(2):CountXml.java:

 package cn.csrc.base.count;

 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 = "D:\\mytools\\eclipse_new\\D\\workspace\\requestCount\\WebContent\\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 int getTempCount() {
return obj.getTempCount();
} 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() >= 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;
} }

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

 <%@ 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>
浏览器访问测试
<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>
临时访问量:<%=xmlcount.getTempCount()%><br>
</body>
</html>

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

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

至此就结束了!

Java统计用户年/月/周/日网站访问量的更多相关文章

  1. c3p0数据库连接池 原创: Java之行 Java之行 5月8日 一、连接池概述 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程

    c3p0数据库连接池 原创: Java之行 Java之行 5月8日 一.连接池概述 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 DB连接池HikariCP为什么如此快 原创: D ...

  2. Java语言学习day33--8月8日

    今日内容介绍1.基本类型包装类2.System类3.Math类4.Arrays类5.大数据运算 ###01基本数据类型对象包装类概述 *A:基本数据类型对象包装类概述 *a.基本类型包装类的产生 在实 ...

  3. Java语言学习day32--8月07日

    ###07正则表达式邮箱地址验证 * A: 正则表达式邮箱地址验证 * a: 案例代码 public class RegexDemo2 { public static void main(String ...

  4. Java语言学习day07--7月6日

    今日内容介绍1.流程控制语句switch2.数组 ###01switch语句解构​ * A:switch语句解构 * a:switch只能针对某个表达式的值作出判断,从而决定程序执行哪一段代码. * ...

  5. java试题复盘——11月25日

    上: 11.下列表述错误的是?(D) A.int是基本类型,直接存数值,Integer是对象,用一个引用指向这个对象. B.在子类构造方法中使用super()显示调用父类的构造方法,super()必须 ...

  6. java试题复盘——11月13日

    上: 10. AccessViolationException异常触发后,下列程序的输出结果为(   A   ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 AccessViol ...

  7. java试题复盘——9月26日

    5.在 JAVA 编程中, Java 编译器会将 Java 程序转换为(A) A.  字节码 B.  可执行代码 C.  机器代码 D.  以上都不对 解析: 编译器将Java源代码编译成字节码cla ...

  8. java试题复盘——9月8日

    上: 1.可将语句块或方法设为同步使用的语句是(A) A synchronized              用于方法或者代码块前,使此方法或者代码变成同步的 B static             ...

  9. Java语言学习day01--6月28日

    Java语言学习day01一:Java概述 1.Java语言发展史 任职于太阳微系统的 詹姆斯·高斯林 等人于1990年代初开发Java语言的雏形,最初被命名为 Oak ,目标设置在 家用电器等小型系 ...

随机推荐

  1. 51nod1489(dfs)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1489 题意:中文题诶- 思路:dfs 首先我们要通过攻击第1 ...

  2. App裂变活动多种玩法解析

    移动互联网时代,流量为王.在App获取流量的过程中,有资金的砸广告,没资金的铺渠道,但是不管你有钱没钱,社交平台都是必须重点争夺的流量阵地. 毕竟,截至2018年底,微信及WeChat的合并月活跃账户 ...

  3. generator-yield到底是个啥

    咱们通过上篇文章的简单介绍,已经了解到yield是放弃执行,放弃现在继续执行的权利,把权利让给别人,什么时候想继续执行的时候,再调一次就好.接下来咱们说两件事,就是yield是一个很有意思的东西,它可 ...

  4. [题解](树形dp/记忆化搜索)luogu_P1040_加分二叉树

    树形dp/记忆化搜索 首先可以看出树形dp,因为第一个问题并不需要知道子树的样子, 然而第二个输出前序遍历,必须知道每个子树的根节点,需要在树形dp过程中记录,递归输出 那么如何求最大加分树——根据中 ...

  5. RabbitMQ权限

    RabbitMQ 引言 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队 ...

  6. Luogu P2183 [国家集训队]礼物 扩展卢卡斯+组合数

    好吧学长说是板子...学了之后才发现就是板子qwq 题意:求$ C_n^{w_1}*C_{n-w_1}^{w_2}*C_{n-w_1-w_2}^{w_3}*...\space mod \space P ...

  7. 简单的方法爬取b站dnf视频封面步骤解释

    这随笔代码链接:http://www.cnblogs.com/yinghualuowu/p/8186375.html 首先我们要知道,一个分区封面显示到底在哪里可以找到. 很明显,查看审查元素并不能找 ...

  8. jQuery树形控件zTree使用

    http://www.cnblogs.com/AutumnRhyme/p/5915769.html .................................................. ...

  9. UVALive - 4223(hdu 2926)

    ---恢复内容开始--- 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962 Trucking Time Limit: 20000/10000 MS ...

  10. Problem Statement

    题目链接:https://vjudge.net/contest/239445#problem/E     E - Problem Statement You are given nn strings ...