1.StatisticsFilter.java  过滤器

package com.project.common.filter;
import com.project.common.config.Global;
import com.project.modules.cms.web.front.Counter;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;public class StatisticsFilter implements Filter {//设置txt文档路径(count.txt用来记录总访问量,countday.txt用来记录日访问量)public static final String countPath="D:\\project\\src\\main\\webapp\\WEB-INF\\count.txt";public static final String countDayPath="D:\\project\\src\\main\\webapp\\WEB-INF\\countday.txt";private FilterConfig filterConfig;/*** 不过滤的路径*/public static final String NO_INTERCEPTOR_PATH = ".*/((static)|(userfiles)|(homeNews)|(toHomePage)|(uploadFiles)|(plugins)|(nicEdit)|(My97DatePicker)|(js)|"+ "(jqwidgets)|(img)|(images)|(fonts)|(css)|(bootstrap)|(blog)|(assets)|(admin)|(toRegister)|(register)|(login)|(logout)|(code)|"+ "(MP_verify_ZoWZAZBGitIzhZkG.txt)|(app)|(webapp)|(static)|(main)|(websocket)|(fogot)|(sendmail)|(checkName)|(checkECode)|(resetPass)|(parking_app)).*";/*** 初始化** @param filterConfig* @throws ServletException*/@Overridepublic void init(FilterConfig filterConfig) throws ServletException {this.filterConfig = filterConfig;}/*** doFilter** @param servletRequest* @param servletResponse* @param filterChain* @throws IOException* @throws ServletException*/@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {Counter CountFileHandler = new Counter();HttpServletRequest request = (HttpServletRequest) servletRequest;String path = request.getServletPath();//判断路径是否需要过滤if (!path.matches(NO_INTERCEPTOR_PATH)) {ServletContext context = this.filterConfig.getServletContext();//从context中获取访问量Object count = context.getAttribute("count");if (count == null) {//访问量不存在时读取count.txtcount = CountFileHandler.readFromFile(countPath);//将读到的数据放到context中context.setAttribute("count", count);} else {//将count转换成long型long longCount = Long.parseLong((String) count);//context中count存在时,加1longCount++;//覆盖之前的countcontext.setAttribute("count", longCount);//覆盖txt文档的值CountFileHandler.write2File(countPath, longCount);}Object countday = context.getAttribute("countday");if (countday == null) {countday = CountFileHandler.readFromFile(countDayPath);context.setAttribute("countday", countday);} else {countday = CountFileHandler.readFromFile(countDayPath);if (countday.equals(0)) {//如果countday已被定时器清零,将context中的countday清零context.setAttribute("countday", 0);} else {long longCount = Long.parseLong((String) countday);longCount++;context.setAttribute("countday", longCount);CountFileHandler.write2File(countDayPath, longCount);}}}filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {}
}
2.Counter.java
package com.project.modules.cms.web.front;import javax.servlet.http.HttpServlet;
import java.io.*;public class Counter extends HttpServlet{//写入文件的方法public static void write2File(String filename, long count){try{PrintWriter out = new PrintWriter(new FileWriter(filename));out.println(count);out.close();} catch (IOException e) {e.printStackTrace();}}//读文件的方法public static long readFromFile(String filename){File file = new File(filename);long count = 0;if(!file.exists()){try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}write2File(filename, 0);}try{BufferedReader in = new BufferedReader(new FileReader(file));try{count = Long.parseLong(in.readLine());}catch (NumberFormatException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} catch (FileNotFoundException e) {e.printStackTrace();}return count;}
}

3.定时器

package com.project.modules.weixin.job;
import com.project.common.config.Global;
import com.project.modules.cms.web.front.Counter;@Lazy(false)
public class Task {public static final String countDayPath="D:\\project\\src\\main\\webapp\\WEB-INF\\countday.txt";@Scheduled(cron = "0 0 0 * * ?") private void TashTest(){ Counter CountFileHandler = new Counter(); CountFileHandler.write2File(countDayPath, 0); }
}

4.前台

日访问量:
<%=request.getServletContext().getAttribute("countday")%>
总访问量:
<%=request.getServletContext().getAttribute("count")%>

5.将count.txt和countday.txt放到对应的路径下

6.在web.xml中配置过滤器

        <filter><filter-name>StatisticsFilter</filter-name><filter-class>com.pr.common.filter.StatisticsFilter</filter-class></filter><filter-mapping><filter-name>StatisticsFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

7.可以把常量提取到常量类中,方便项目维护等操作。

java实现日访问量和访问量的记录与显示相关推荐

  1. springboot整合redis、mybatis、@EnableScheduling定时任务,实现日访问量与日活量的统计与记录

    目录 一.实现目标 二.windows版本redis下载与安装 三.springboot集成redis 四.springboot集成mybatis 集成通用mapper 五.实现日访问量 @Enabl ...

  2. 数据统计之日分类商品访问量

    日分类商品访问量 [统计一天中访问分类信息的用户的数量] 接口分析 请求方式: GET /meiduo_admin/statistical/goods_day_views/ # 日分类商品访问量url ...

  3. 计算机毕业设计Java大学生二手物品交易网站演示记录2021(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java大学生二手物品交易网站演示记录2021(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java大学生二手物品交易网站演示记录2021(源码+系统+mysql数据库+lw ...

  4. Java程序员学习笔记——Mybatis日常记录

    目录 mybatis的基本概念 mybatis如何构建和执行的 mybatis的缓存 mybatis的插件系统 mybatis的日志系统 mybatis用到的设计模式 myabtis集成到spring ...

  5. Linux入门实践笔记(七)——云服务器中配置Java项目的JMX连接失败问题解决记录

    Linux入门实践笔记(七)--云服务器中配置Java项目的JMX连接失败问题解决记录 参考文章: (1)Linux入门实践笔记(七)--云服务器中配置Java项目的JMX连接失败问题解决记录 (2) ...

  6. 基于JAVA大学生二手物品交易网站演示记录2021计算机毕业设计源码+系统+lw文档+部署

    基于JAVA大学生二手物品交易网站演示记录2021计算机毕业设计源码+系统+lw文档+部署 基于JAVA大学生二手物品交易网站演示记录2021计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: ...

  7. JAVA JDK1.6 https协议下载问题记录

    JAVA JDK1.6 https协议下载问题记录及通过代理下载 解决方案 TrustManager [] tm = {new MyX509TrusManager()}; SSLContext ssl ...

  8. java后端 春招各公司面试记录(内含字节、阿里等大厂)

    java后端 春招各公司面试记录(内含字节.阿里等大厂) 嘀嗒面试 Meta APP 北大软件 望石智慧 望石二面 望石三面四面 顺丰科技 顺丰二面 顺丰三面 火线安全笔试 火线安全面试 根网笔试 K ...

  9. kotlin与java混合开发_使用kotlin和Java混合开发Android项目爬坑记录

    使用kotlin和Java混合开发Android项目爬坑记录 不定期将开发过程中遇到的问题添加在此处,加深记忆. 主要内容包括但不限于java与kotlin语言的一些区别,以及在使用android-s ...

  10. L版本通话记录里面显示的通话时长与实际不一致的问题

    [DESCRIPTION] SW Version:L0.L1 1. 问题1:通话记录里面显示的通话时长与实际不一致的问题. 2. 问题2:通话过程中去设置时间,通话计时时间会变的问题. [SOLUTI ...

最新文章

  1. awk截取字符命令_Linux运维基础技能: 脚本编程与Linux命令
  2. 【枚举】【二分答案】【分块答案】【BFS】【最大流】【Dinic】bzoj1189 [HNOI2007]紧急疏散evacuate...
  3. java虚拟机规范-加载、链接与初始化
  4. Android studio | From Zero To One ——初级控件(屏幕显示)
  5. Nagios学习实践系列
  6. TextView 单行显示长文本
  7. MySql(15)——Mysql在高并发情况下,防止库存超卖而小于0的解决方案
  8. hdu 1908数据结构水题
  9. 学习笔记(26):玩转Python-Python3基础入门-案例-快递价格计算器(1)
  10. 联邦学习:FedProx框架
  11. 世界第八大奇迹:复利
  12. Excel技能培训之十 选择性粘贴,单元格公式转换为数值,对每个单元格进行运算,行列转换,只粘贴非空值
  13. 解决opencv打开视频上下翻转问题
  14. python 微博_用python发微博
  15. 如何计算平台的可用性?
  16. Vue3 - Element plus 实现 “带分页“ 表格组件,实现跨页进行 “分页勾选“ 的多选功能(解决分页表格组件 <el-table> 跨页后已前勾选的行自动消失问题)详细示例解决教程
  17. python安卓库拍照_Python Faker库的实战,用Faker库生成伪造的安卓通讯录
  18. [CodeM美团比赛] 优惠券
  19. 成为云计算产品经理的前提
  20. 二类电商运营怎么选品 二类电商怎么运营?

热门文章

  1. 今天腊八,一大清早就下起了鹅毛大雪啊。。。
  2. 春节知识不完全手册[转载]
  3. 《洗脑术:怎样有逻辑地说服他人》
  4. H5-移动端-textarea无法滚动问题
  5. codewars另一个可以锻炼代码编程能力的网站
  6. lambda函数介绍
  7. 没有接口文档,但是leader要你做接口测试应该怎么办!
  8. 嵌入式开发--无刷电机学习1--FOC简介
  9. Eclipse下载安装教程(详细)
  10. 使用VB.NET来设计连连看游戏