监听器是 Servlet 中一种特殊的类,它们能帮助开发者监听 Web 中的特定事件,比如 ServletContext,HttpSession,ServletRequest 的创建和销毁;属性键值对的创建、销毁和修改等,可以在某些动作前后增加处理和操作。
作用- 统计在线人数,利用 HttpSessionLisener 或 HttpSessionAttributeListener
- 加载初始化信息:利用 ServletContextListener
- 统计网站访问量
- 实现访问监控
// 监听上下文对象的初始化和销毁
interface ServletContextListener {
// 通知上下文对象正在被初始化
void contextInitialized(ServletContextEvent var1);
// 通知上下文对象即将被关闭
void contextDestroyed(ServletContextEvent var1);
}
// 监听上下文对象对属性的增删改操作
interface ServletContextAttributeListener {
// 通知添加了属性键值对
void attributeAdded(ServletContextAttributeEvent var1);
// 通知移除了属性键值对
void attributeRemoved(ServletContextAttributeEvent var1);
// 通知修改了属性
void attributeReplaced(ServletContextAttributeEvent var1);
}
// 监听Session对象的创建和销毁
interface HttpSessionListener {
// session已创建
void sessionCreated(HttpSessionEvent var1);
// session已销毁
void sessionDestroyed(HttpSessionEvent var1);
}
// 监听session的属性增删改操作
interface HttpSessionAttributeListener {
// 通知session中添加了属性
void attributeAdded(HttpSessionBindingEvent var1);
// 通知session中移除了属性
void attributeRemoved(HttpSessionBindingEvent var1);
// 通知session中修改了属性
void attributeReplaced(HttpSessionBindingEvent var1);
}
// 监听请求的初始化和销毁
interface ServletRequestListener {
// 通知请求对象被销毁
void requestDestroyed(ServletRequestEvent var1);
// 通知请求对象正在初始化
void requestInitialized(ServletRequestEvent var1);
// 通知请求对象添加了属性
void attributeAdded(ServletRequestAttributeEvent var1);
// 通知请求对象移除了属性
void attributeRemoved(ServletRequestAttributeEvent var1);
// 通知请求对象修改了属性
void attributeReplaced(ServletRequestAttributeEvent var1);
}
两种配置方式
1、注解
步骤
-
实现监听器接口
-
重写抽象方法
-
声明@WebListener注解
// 声明监听器注解
@WebListener
public class CreateListener implements ServletContextListener {
// 重写contextInitialized方法
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("Servlet be initialized!!");
}
// 重写contextDestroyed方法
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("Servlet be destroyed!!");
}
}
2、通过 web.xml 配置文件
监听器
public class XMLListener implements HttpSessionListener {
// 重写sessionCreated方法
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
System.out.println("Session be created: " + httpSessionEvent.getSession().getId());
}
// 重写sessionDestroyed方法
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
System.out.println("Session be destroyed!!");
}
}
Servlet
@WebServlet("/xml")
public class XMLServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession(true);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
Webxml文件
com.fc.listener.XMLListener



