文章目录
- 什么是监听器
- 如何写监听器
- 配置监听器
- 统计在线人数的案例
什么是监听器
Servlet 规范当中定义的一种特殊的类,作用是监听容器当中产生的一些事件并进行相应的处理。
容器产生的事件指的是两大类事件:
第一大类
生命周期相关的事件,指的是当容器创建或者销毁 request,session,ServletContext 对象时产生的事件。
第二大类
绑订事件,指的是当调用 request,session,ServletContext 对象的setAttribute,removeAttribute 时产生的事件。
如何写监听器
step1
写一个 Java 类,实现特定的监听器接口(依据要监听的事件类型,去实现相应的监听器接口)。
step2
在接口声明的方法中,实现监听的逻辑。
step3
配置(web.xml)。
配置监听器
有先后顺序的要求,在 <context-param>
之后, <filter>
之前;<filter>
在 <listener>
之后,<servlet>
之前。
统计在线人数的案例
监听器示例代码:
package priv.lwx.servlet.web;import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;/*** Session监听器** @author liaowenxiong* @date 2022/2/27 16:29*/
@WebListener
public class CountListener implements HttpSessionListener {private int count = 0;/*** Session对象创建后,就会执行该方法** @param arg0*/public void sessionCreated(HttpSessionEvent arg0) {System.out.println("sessionCreated...");count++;HttpSession session = arg0.getSession();ServletContext sctx = session.getServletContext();sctx.setAttribute("count", count);}/*** Session对象销毁前会执行该方法** @param arg0*/public void sessionDestroyed(HttpSessionEvent arg0) {System.out.println("Session对象被销毁...");count--;HttpSession session = arg0.getSession();ServletContext sctx = session.getServletContext();sctx.setAttribute("count", count);}
}
index.jsp 代码:
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head><title>当前系统在线人数</title>
</head>
<body>
系统在线人数:
<%= application.getAttribute("count") %>
<br/>
<a href="logout.jsp">退出</a>
</body>
</html>
logout.jsp 的示例代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%session.invalidate();
%>
</body>
</html>
部署好之后,启动服务器,访问:http://localhost:8080/sl/index.jsp,sl 项目的虚拟目录。