Listener:监听器
-
概念:web的三大组件之一。
事件监听机制 事件:一件事情 事件源 :事件发生的地方 监听器 :一个对象 注册监听:将事件、事件源、监听器绑定在一起。 当事件源上发生某个事件后,执行监听器代码
-
ServletContextListener:监听ServletContext对象的创建和销毁
方法 void contextDestroyed(ServletContextEvent sce) :ServletContext对象被销毁之前会调用该方法 void contextInitialized(ServletContextEvent sce) :ServletContext对象创建后会调用该方法
-
步骤:
1. 定义一个类,实现ServletContextListener接口
2. 复写方法
3. 配置
(1). web.xml
<listener>
<listener-class>cn.itcast.web.listener.ContextLoaderListener</listener-class>
</listener>
- 指定初始化参数< context-param>
(2). 注解:不需要指定路径,所以直接写一个注解就行
* @WebListener
- 实例
@Override
public void attributeAdded(HttpSessionBindingEvent se) {
//添加
String name = se.getName();
//登录用户的session发生变化
if("account".equals(name)){
ServletContext application = se.getSession().getServletContext();
int online_num = application.getAttribute("online_num") == null ? 0 : (Integer) application.getAttribute("online_num");
System.out.println("online_num = " + online_num);
online_num++;
application.setAttribute("online_num",online_num);
}
}
@Override
public void attributeRemoved(HttpSessionBindingEvent se) {
//销毁
String name = se.getName();
//退出 用户的session发生变化
if("account".equals(name)){
ServletContext application = se.getSession().getServletContext();
int online_num = application.getAttribute("online_num") == null ? 0 : (Integer) application.getAttribute("online_num");
System.out.println("online_num = " + online_num);
online_num--;
application.setAttribute("online_num",online_num);
}
}
实现效果:
添加后访问(Gif):
用户退出后(Gif):