统计网站页面的访问量

您所在的位置:网站首页 本地网站访问统计 统计网站页面的访问量

统计网站页面的访问量

2023-09-16 03:29| 来源: 网络整理| 查看: 265

最近做的《食盐行业信用管理与公共服务系统》项目,需要做一个网站文章页面的访问量功能。自己的解决方案,可能很简陋,但是解决了问题,而且我也给出了详细的过程。请大家多多支持,参与谈论。博客写这么长不容易啊。嘿嘿.

需求及规则如下: 1.同一个ip地址,两次刷新页面的时间,大于10秒,则认为是2次访问。 2.每天的凌晨0点到1点之间,执行插入或更新数据库操作。因此,网站页面展示的访问量,都是昨天的访问量。

思路及设计说明: 1.过滤器:过滤要计算访问量的某个页面或某些页面,当访问过滤页面时,组装访问量数据。 2.监听器:在项目启动时,启动定时器。 3.定时器:每隔一小时执行一次,如果时间处于0点-1点之间,则把访问量数据插入或更新进数据库,并清空ServletContext里面存放的访问量数据。 4.ServletContext:存放每天的访问量数据。因为ServletContext的生命周期是tomcat启动后,整个项目的生命周期。 5.本项目中采用的是springMVC,因此,附录的PagevisitRemark.java类添加了注解,请大家根据需要,自己写,不一定用我写的。

问题及解决: 1.开发中,遇到了在监听类中,无法调用到service层的方法,试了很多种办法都不行,可能是框架有问题,也可能是别的问题。 鉴于时间关系,没有解决,只能等以后再说了。反正是每天才执行一次插入或更新操作,最后就用了一个笨办法,直接用jdbc连接数据库,写sql语句了。 2.代码里面的MMap类,是我项目中经常用到的一个类。就是个封装数据的类。不用也没关系。

代码中所有的类都贴出来,用不到的自己删除。本文主要是提供一个解决思路和一个详细解决方案(虽然很笨)。 以后如果发现更好的办法。我会再次更新。欢迎积极留言讨论,请关注我的其它博客文章。 目录视图链接地址:http://blog.csdn.net/ludongshun2016?viewmode=contents

表结构 这里写图片描述 表约束 这里写图片描述 web.xml添加代码

PageVisitFilter com.app.archive.web.filter.PageVisitFilter PageVisitFilter /website/xiangxi_article.jsp com.app.archive.util.online.PageVisitListener

监听器类(含定时器):PageVisitListener.java

package com.app.archive.util.online; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Timer; import java.util.TimerTask; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import com.app.archive.model.salt.MMap; import com.app.archive.model.salt.PagevisitRemark; /** *

Title:PageVisitListener

*

Description: 监听器,在程序启动时执行定时器,每隔一小时执行一次定时器,如果时间 * 在每天的0点-1点之间,则执行插入或更新数据库操作

* @author 鲁东顺 * @date 2016-10-24 下午1:42:59 */ public class PageVisitListener implements ServletContextListener{ private ServletContext context; @Override public void contextDestroyed(ServletContextEvent arg0) { } @Override public void contextInitialized(ServletContextEvent arg0) { this.context = arg0.getServletContext(); timerRun(); } /** * 定时器,每隔一小时执行一次,如果在0-1点之间,则执行插入数据库操作 * lds */ public void timerRun() { //得到时间类 Calendar date = Calendar.getInstance(); //设置时间为 xx-xx-xx 00:00:00 date.set(date.get(Calendar.YEAR), date.get(Calendar.MONTH), date.get(Calendar.DATE), 0, 0, 0); //一天的毫秒数 long daySpan = 24 * 60 * 60 * 1000; //long daySpan = 60*1000*60;//1小时 //long daySpan = 30*1000;//30秒 ..测试时用 //得到定时器实例 Timer t = new Timer(); //使用匿名内方式进行方法覆盖 t.schedule(new TimerTask() { public void run() { //run中填写定时器主要执行的代码块 Map ipMap = (Map) context.getAttribute("ipMap"); Date d=new Date(); int hour=d.getHours(); //每天的凌晨0-1点之间执行 if(hour>=0 && hour < 1){ try { Thread.sleep(30000);//睡眠30秒,等待项目启动 System.out.println("定时器执行.."); if


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3