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

二:运行效果图:

下一次访问

三:具体代码如下

 (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. 清北刷题冲刺 11-02 a.m

    卖书 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  2. EOS 用户权限相关命令

    首先,环境相关的配置请参考https://www.cnblogs.com/hbright/p/9266420.html 在这里,我们一起看年EOS权限相关的东东.我们先查看hml这个用户的相关信息 h ...

  3. springboot 简单使用shiro登录

    首先引入需要的pom <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shir ...

  4. Uva1608

    如果一个序列的所有子序列中均存在至少一个元素,这个元素在该子序列中只出现一次,则这个序列non-boring. 当一个序列[x,y]中没有元素只出现一次,那么该序列不符合要求,如果有的话,设为第i个元 ...

  5. Flask&&人工智能AI --1

    Flask初识,Response三剑客,jsonify以及send_file.Request,模板语言 Jinja2,用户登录例子,内置Sessio 一.Flask初识 首先,要看你学没学过Djang ...

  6. JPA教程

    http://www.yiibai.com/jpa/jpa_criteria_api.html

  7. selenium框架安装及webdriver安装

    本文介绍的是selenium安装及webdriver安装.小实例 1.selenium介绍 selenium是一个用于web应用程序测试的工具. Selenium测试直接运行在浏览器,就向真正的用户操 ...

  8. 【ACM】孪生素数问题

    孪生素数问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 写一个程序,找出给出素数范围内的所有孪生素数的组数.一般来说,孪生素数就是指两个素数距离为2,近的不能再 ...

  9. jquery——选项卡

    下面是闭包做选项卡: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  10. Python踩坑之旅其一杀不死的Shell子进程

    目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 坑后扩展 1.4.1 扩展知识 1.4.1 技术关键字 1.5 填坑总结 1.1 踩坑案例 踩坑的程序是个常驻的Agent类管理进程 ...