本文共 2471 字,大约阅读时间需要 8 分钟。
监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件。
监听对象包括:监听内容包括:创建、销毁、属性改变事件。
监听作用:可以在事件发生前、发生后进行一些处理,一般用于统计在线人数和在线用户、统计网站访问量、系统启动时初始化信息等。创建步骤:
监听器的启动顺序:按照web.xml的配置顺序来启动。
加载顺序:监听器>过滤器>Servlet。说明:web.xml的加载顺序是:【Context-Param】→【Listener】→【Filter】→【Servlet】,而同个类型之间的实际程序调用时的顺序是根据对应的Mapping的顺序进行调用。
public class VisitListener implements HttpSessionListener,ServletContextListener { @Override public void sessionCreated(HttpSessionEvent arg0) { ServletContext application = arg0.getSession().getServletContext(); synchronized (application) { int visit = (Integer) application.getAttribute("visit"); visit++; application.setAttribute("visit", visit); } } @Override public void contextInitialized(ServletContextEvent arg0) { final ServletContext application = arg0.getServletContext(); application.setAttribute("visit", 0); // 定时器设置 Calendar date = Calendar.getInstance(); date.add(Calendar.MINUTE, 1); new Timer().schedule(new TimerTask() { @Override public void run() { int visit = (Integer) application.getAttribute("visit"); System.out.println("当天总的访问量:" + visit); application.setAttribute("visit", 0); // 开始统计下一天 } }, date.getTime(), 24*60*60*1000); } @Override public void sessionDestroyed(HttpSessionEvent arg0) { // 不做处理 } @Override public void contextDestroyed(ServletContextEvent arg0) { // 不做处理 }}
首页
当前网站的访问量有:${applicationScope.visit }
通过上述监听器,实现了网站访问量的实时统计和每日统计功能。
通过定时任务每天重置访问量计数器,并在每日结束时打印当天的访问量统计。(未提供具体参考文章)
转载地址:http://azufk.baihongyu.com/