web.xml中配置:

<listener>
   <listener-class>com.mcm.listener.ServletContextListenerImpl</listener-class>
  </listener>
  <listener>
   <listener-class>com.mcm.listener.HttpSessionListenerImpl</listener-class>
  </listener>

ServletContextListenerImpl类:

package com.mcm.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ServletContextListenerImpl implements ServletContextListener {

public void contextDestroyed(ServletContextEvent event) {
  ServletContext application = event.getServletContext();
  application.removeAttribute("onLineNum");
}

public void contextInitialized(ServletContextEvent event) {
  int num = 0;
  ServletContext application = event.getServletContext();
  application.setAttribute("onLineNum", num);
}

}

HttpSessionListenerImpl类:

package com.mcm.listener;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class HttpSessionListenerImpl implements HttpSessionListener {

public void sessionCreated(HttpSessionEvent event) {
  ServletContext application = event.getSession().getServletContext();
  Integer num = (Integer) application.getAttribute("onLineNum");
  if(num != null){
   int count = num;
   count = count + 1;
   application.setAttribute("onLineNum", count);
  }
 }

public void sessionDestroyed(HttpSessionEvent event) {
  ServletContext application = event.getSession().getServletContext();
  Integer num = (Integer) application.getAttribute("onLineNum");
  int count = num;
  count = count - 1;
  application.setAttribute("onLineNum", count);
  
 }

}

index.jsp中:

当前在线人数:${onLineNum }

结果:

使用ServletContextListener和HttpSessionListener两种监听器实现记录当前网站在线人数的更多相关文章

  1. map集合修改其中元素 去除Map集合中所有具有相同值的元素 Properties长久保存的流操作 两种用map记录单词或字母个数的方法

    package com.swift.lianxi; import java.util.HashMap; import java.util.Iterator; import java.util.Map; ...

  2. Table的两种处理方法记录

    简单记录一下,方便以后参考:基于JQuery实现 一种是滚轮,一种是翻页 滚轮的代码实现: <div class="col-md-12" style="width: ...

  3. Linux小技巧之:两种方法统计访问web网站的前10个IP

    获得访问前10位的IP地址: 10.46.170.7 218.202.70.147 77.72.83.87 5.39.217.107 185.197.74.234 185.197.74.231 第二种 ...

  4. 前端提交表单两种验证方式记录 jq或h5 required属性

    JQuery: <form id="form"> <input type="text" name="aaa"> &l ...

  5. 第二节:SSL证书的申请、配置(IIS通用)及跳转Https请求的两种方式

    一. 相关概念介绍 1. SSL证书服务 SSL证书服务由"服务商"联合多家国内外数字证书管理和颁发的权威机构.在xx云平台上直接提供的服务器数字证书.您可以在阿里云.腾讯云等平台 ...

  6. 在Java Web程序中使用监听器可以通过以下两种方法

    之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响 ...

  7. android第一行代码-5.监听器的两种用法和context

    监听器的两种用法 1.匿名函数设置监听器 public class MainActivity extends Activity { private Button button; @Override p ...

  8. java中servletContextListener、httpSessionListener和servletRequestListener使用整理

    在java web应用中,listener监听器似乎是必不可少的,常常用来监听servletContext.httpSession.servletRequest等域对象的创建.销毁以及属性的变化等等, ...

  9. <Listener>servletContextListener、httpSessionListener和servletRequestListener使用整理

    在java web应用中,listener监听器似乎是不可缺少的.经常常使用来监听servletContext.httpSession.servletRequest等域对象的创建.销毁以及属性的变化等 ...

随机推荐

  1. PHP 使用用户自定义的比较函数对数组中的值进行排序

    原文:PHP 使用用户自定义的比较函数对数组中的值进行排序 usort (PHP 4, PHP 5) usort —      使用用户自定义的比较函数对数组中的值进行排序 说明       bool ...

  2. jq入门--选择器

    选择器是JQuery一大特色,所有的DOM操作.事件操作.Ajax操作都离不开选择器.熟练掌握JQuery的选择器,可以节省很多代码,很大程序上简化我们的脚本编程工作. JQuery的选择器很类似于样 ...

  3. C# 复习(1) 委托与事件

    委托定义顺序 1. 声明一个委托 2.定义一个委托变量 3. 委托变量的初始化或者给委托变量绑定一个方法 4.调用委托 事件:事件是对委托的封装. 事件只能在创建事件的类的内部调用. public c ...

  4. C# 笔试题,看你会几道题

    1.       Which interface you need to implement to support for each? IEnumerator IEnumerable ICompare ...

  5. [翻译]初识SQL Server 2005 Reporting Services Part 4

    原文:[翻译]初识SQL Server 2005 Reporting Services Part 4 这一篇是关于SQL Server 2005 Reporting Services四篇文章中最后一篇 ...

  6. WebIM(5)----将WebIM嵌入到页面中

    在之前的文章中,已经开发了一个简单的WebIM,但是这个WebIM是在独立的页面中的,今天发布的WebIM是一个可以嵌入到自己网页中的版本,你只需添加少量的代码,就可以在页面中嵌入一个WebIM.不过 ...

  7. 我的Android 4 学习系列之数据库和Content Provider

    目录 创建数据库和使用SQLite 使用Content Provider.Cusor和Content Value来存储.共享和使用应用程序数据 使用Cursor Loader异步查询Content P ...

  8. AjaxPro实现无刷新更新数据

    使用AjaxPro实现无刷新更新数据 需求 在一个页面动态无刷新的更新后台得到的数据.要想无刷新的更新数据,需要使用Javascript能够获取后台返回的数据,然后通过第三方Javascript库(J ...

  9. [转]【Android】9-patch图片以及例子说明

    1.何为9-patch? NinePatch图片以*.9.png结尾,和普通图片(png图片)的区别是四周多了一个边框(如下图所示): 采用NinePatch图片做背景,可使背景随着内容的拉伸(缩小) ...

  10. Javascript多线程引擎(六)

    Javascript多线程引擎(六) 经过三个月的时间, Javascript 引擎已经完成beta版本(还不支持多线程特性, 预计下个星期就可以支持了, 现阶段还在进行测试基本JS单元功能), 并且 ...