1.Listener
监听器(Listener)是一种特殊的Java类,它可以用来监听Web应用程序中的事件,例如ServletContext、HttpSession和ServletRequest等的创建、销毁、修改等事件。
通过监听器,我们可以在特定的事件发生时执行一些自定义的代码,以实现对应用程序的控制和管理。
2.HttpSessionListener
HttpSessionListener是一个监听器接口,用于监听HttpSession对象的创建和销毁事件。
当Web应用程序启动时,容器会创建一个HttpSession对象,当用户关闭浏览器或Session过期时,容器会销毁该对象。在HttpSessionListener中,我们可以编写代码来实现用户登录、退出、Session超时等功能。
HttpSessionListener中常用的方法有以下两个:
sessionCreated(HttpSessionEvent event):当HttpSession对象被创建时,会触发该事件。
sessionDestroyed(HttpSessionEvent event):当HttpSession对象被销毁时,会触发该事件。
我们可以用HttpSessionListener来编写一个记录当前在线人数的程序:
1) 编写监听器代码
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class Listener01 implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
Integer count = (Integer)context.getAttribute("count");
if(count!=null){
context.setAttribute("count",count+1);
}else{
context.setAttribute("count", 1);
}
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
Integer count = (Integer)context.getAttribute("count");
if(count!=null){
context.setAttribute("count",count-1);
}else{
context.setAttribute("count", 0);
}
}
}
2)编写jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
目前有<%= this.getServletConfig().getServletContext().getAttribute("count") %>人在线
</body>
</html>
3)在web.xml中注册监听器
<listener> <listener-class>Listener01</listener-class> </listener>
4)结果:
因为我用两个浏览器访问了这个网址,所有显示有两个人在线。
当我关闭其中一个浏览器后,还是显示有两个人在线。因为这里计算的是会话的个数。
而会话只有手动关闭(session.invalidate())或者会话超时或者关闭服务器后才会结束。