web 监听器是一种 Servlet 中的特殊的类,它们能帮助开发者监听 web 中的特定事件,比如 ServletContext,HttpSession,ServletRequest 的创建和销毁;变量的创建、销毁和修改等。可以在某些 动作前后增加处理,实现监控。例如可以用来统计在线人数等。
监听器有三类8种:
⑴监听生命周期(三个域对象的创建和销毁):实现接口 ServletRequestListener、 HttpSessionListener 、ServletContextListener
⑵监听值的变化(属性添加,移除,替换):实现接口 ServletRequestAttributeListener、 HttpSessionAttributeListener、ServletContextAttributeListener
⑶针对 session 中的对象:监听 session 中的 java 对象(javaBean),javaBean 直接实现监听器的 接口 HttpSessionBindingListener、HttpSessionActivationListener。这里我们只做一个简单的演示。 假设我们想做一个对在线人数的监控。
实现步骤
- 创建一个监听器,需要实现某种接口,根据需求选取 HttpSessionListener
- 在 web.xml 中配置该监听器
创建一个类,并实现 HttpSessionListener 接口,用来检测 Session 的创建和销毁。
//定义一个成员变量,计算session个数
int onlinepeople = 0;
@Override
public void sessionCreated(HttpSessionEvent se) {
//监听session的创建
//不同用户有不同的session,需创建ServletContext对象,以获得更大的作用域范围
onlinepeople++;
//数值存入setvletcontext中
se.getSession().getServletContext().setAttribute("onlinePeople", onlinepeople);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
//监听session的销毁
//正常关闭服务器不会销毁,因为会自动序列化到本地
onlinepeople--;
se.getSession().getServletContext().setAttribute("onlinepeople", onlinepeople);
}
在 web.xml 中配置该监听器,让监听器生效
<listener>
<listener-class>com.mage.listener.TestListener01</listener-class>
</listener>