java记录访问次数_Java 利用监听器来实现记录用户访问网站次数(示例代码)

本文介绍如何利用Java的ServletContextListener接口来记录并持久化用户访问网站的次数,避免服务器重启导致计数丢失。通过在Web应用启动时读取文件中的计数器值,将计数器对象存入Web应用范围,在应用终止时将计数器值保存回文件,实现了无需数据库的访问计数功能。
摘要由CSDN通过智能技术生成

假如有这么一个需求,要记录所有用户访问某一页面的次数。

最先想到的可能是在该Controller定义一个静态成员,然后在相应Action里自增。但这样有一个问题,就是Tomcat或者其他服务器重启的话,这个值是没办法保存的。

当然在数据库中直接保存也是可以的,但因此便要去单独建张表,日后用户访问相应页面都要去访问数据库维护该表有点不值得。

利用自定义ServletContextListener可以很方便做到这一点。思路如下:

1 、在 Web 应用启动时从文件中读取计数器的数值,并把表示计数器的 Counter 对象存放到 Web应用范围内。存放计数器的文件的路径为helloapp/count/count.txt 。

2 、在Web 应用终止时把Web 应用范围内的计数器的数值保存到count.txt 文件中。

public class MyServletContextListener implementsServletContextListener{public voidcontextInitialized(ServletContextEvent sce){

System.out.println("helloapp application is Initialized.");//获取 ServletContext 对象

ServletContext context=sce.getServletContext();try{//从文件中读取计数器的数值

BufferedReader reader=newBufferedReader(newInputStreamReader(context.

getResourceAsStream("/count/count.txt")));int count=Integer.parseInt(reader.r

下面是一个简单的示例代码实现了CountListener.java监听器类,用于记录当前在线人数和被访问的总次数: ```java import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class CountListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { // 应用程序启动时,初始化在线人数和访问次数 ServletContext context = sce.getServletContext(); context.setAttribute("onlineCount", 0); context.setAttribute("visitCount", 0); } @Override public void contextDestroyed(ServletContextEvent sce) { // 应用程序关闭时,清空在线人数和访问次数 ServletContext context = sce.getServletContext(); context.removeAttribute("onlineCount"); context.removeAttribute("visitCount"); } @Override public void sessionCreated(HttpSessionEvent se) { // 有新的会话创建时,增加在线人数 ServletContext context = se.getSession().getServletContext(); Integer onlineCount = (Integer) context.getAttribute("onlineCount"); onlineCount++; context.setAttribute("onlineCount", onlineCount); } @Override public void sessionDestroyed(HttpSessionEvent se) { // 有会话销毁时,减少在线人数 ServletContext context = se.getSession().getServletContext(); Integer onlineCount = (Integer) context.getAttribute("onlineCount"); onlineCount--; context.setAttribute("onlineCount", onlineCount); } @Override public void requestInitialized(ServletRequestEvent sre) { // 有新的请求时,增加访问次数 ServletContext context = sre.getServletContext(); Integer visitCount = (Integer) context.getAttribute("visitCount"); visitCount++; context.setAttribute("visitCount", visitCount); } @Override public void requestDestroyed(ServletRequestEvent sre) { // 请求结束时不做任何处理 } } ``` 在web.xml中配置监听器,如下所示: ```xml <listener> <listener-class>com.example.CountListener</listener-class> </listener> ``` 这样,当应用程序启动时,CountListener会被初始化,并将在线人数和访问次数都设置为0。当有新的会话创建时,会增加在线人数;当有会话销毁时,会减少在线人数。当有新的请求时,会增加访问次数。最后,当应用程序关闭时,CountListener会被销毁,在线人数和访问次数会被清空。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值