Listener
监听器用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等。
按监听的对象划分
ServletContext
对象监听器HttpSession
对象监听器ServletRequest
对象监听器
按监听的事件划分
- 对象自身的创建和销毁的监听器
- 对象中属性的创建和消除的监听器
- session中的某个对象的状态变化的监听器
HttpSession 监听器
HttpSessionListener
网站在线人数统计
业务逻辑:每当用户访问或离去就会创建或销毁一个session,监听session数量就是统计在线人数
public class OnlineCountListener implements HttpSessionListener {
//创建session监听,一旦创建session就会触发该事件
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
//每次有session创建,代表用户数量+1
HttpSession session = httpSessionEvent.getSession();
//获取上下文,将人数OnlineCount存入上下文中方便读写
ServletContext sct = session.getServletContext();
Integer OnlineCount = (Integer) sct.getAttribute("OnlineCount");
if (OnlineCount==null){
OnlineCount = new Integer(1);
}else {
int count = OnlineCount.intValue();
OnlineCount = new Integer(count+1);
}
//数值通过属性存入上下文中
sct.setAttribute("OnlineCount", OnlineCount);
}
//销毁session监听,一旦销毁session就会触发该事件
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
//每次有session创建,代表用户数量+1
HttpSession session = httpSessionEvent.getSession();
//获取上下文,将人数OnlineCount存入上下文中方便读写
ServletContext sct = session.getServletContext();
Integer OnlineCount = (Integer) sct.getAttribute("OnlineCount");
if (OnlineCount==null){
OnlineCount = new Integer(0);
}else {
int count = OnlineCount.intValue();
OnlineCount = new Integer(count-1);
}
//数值通过属性存入上下文中
sct.setAttribute("OnlineCount", OnlineCount);
}
}
配置web.xml
<listener>
<listener-class>com.zh1z3ven.listener.OnlineCountListener</listener-class>
</listener>
JSP页面展示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>OnlineCount</title>
</head>
<body>
<h2 align="center">当前在线人数为:
<span><%= application.getAttribute("OnlineCount")%></span>
</h2>
</body>
</html>
HttpSessionAttributeListener
监听session属性的增加、移除以及属性值改变
ServletContext 监听器
ServletContextListener
监听web上下文的初始化(服务器已准备好接收请求)与销毁
ServletContextAttributeListener
监听web上下文属性的增加、删除、属性值变化
ServletRequest 监听器
ServletRequestListener
监听request的创建与销毁
ServletRequestAttributeListener
监听request的属性的增加、删除、属性值变化