监听器
实现一个监听器的接口: 有(N)种
1、编写一个监听器
实现监听器的接口
2、配置监听器
web.xml中注册监听器
监听器用的比较少 Spring 很多都用过滤器都实现的
接下来我们用监听器完成一个Demo
统计网站在线人数
思路 每个人访问网站的时候服务器都会给他一个Session,我们监听Session的创建和销毁
同时更新在线人数 显示在JSP页面上,我们将结果存储到ServletContext中,因为在线人数是公共的
前端只需要get Context中的对应属性即可
OnlineCountListener
package com.lding.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import java.awt.event.MouseListener;
/**
* @program: javaweb-filter
* @description:
* @author: 王丁
* @date: 2021-11-02 22:39
**/
//统计网站在线人数:统计session
public class OnlineCountListner implements HttpSessionListener {
//创建Session的监听:看你的一举一动
//一旦创建Session 就会触发一次这个事件
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
Integer onlineCount =(Integer) servletContext.getAttribute("OnlineCount");
if(onlineCount==null){
onlineCount=new Integer(1);
}else{
int count=onlineCount.intValue();
onlineCount=new Integer(count+1);
}
servletContext.setAttribute("OnlineCount",onlineCount);
}
//销毁Session的监听
//一旦Session销毁就会触发一个事件
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
Integer onlineCount =(Integer) servletContext.getAttribute("OnlineCount");
if(onlineCount==null){
onlineCount=new Integer(0);
}else{
int count=onlineCount.intValue();
onlineCount=new Integer(count- 1);
}
servletContext.setAttribute("OnlineCount",onlineCount);
}
}
Web.xml
<listener>
<listener-class>com.lding.listener.OnlineCountListner</listener-class>
</listener>
监听器的配置只需要一行 配置listener-class
运行结果