在Java中,监听器(Listener)是一种常见的设计模式,用于在对象状态发生变化时通知其他对象。在Java Web应用中,常见的监听器是基于Servlet规范的事件监听器,其中包括:
- ServletContextListener:
- 用于监听Web应用的启动和关闭事件。
- 实现
ServletContextListener
接口,重写contextInitialized
和contextDestroyed
方法。
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// Web应用初始化时执行的操作
System.out.println("Web应用初始化");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// Web应用销毁时执行的操作
System.out.println("Web应用销毁");
}
}
- HttpSessionListener:
- 用于监听用户会话(
HttpSession
)的创建和销毁事件。 - 实现
HttpSessionListener
接口,重写sessionCreated
和sessionDestroyed
方法。
- 用于监听用户会话(
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MySessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
// 用户会话创建时执行的操作
System.out.println("用户会话创建");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// 用户会话销毁时执行的操作
System.out.println("用户会话销毁");
}
}
- ServletRequestListener:
- 用于监听HTTP请求的创建和销毁事件。
- 实现
ServletRequestListener
接口,重写requestInitialized
和requestDestroyed
方法。
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
public class MyRequestListener implements ServletRequestListener {
@Override
public void requestInitialized(ServletRequestEvent sre) {
// HTTP请求创建时执行的操作
System.out.println("HTTP请求创建");
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
// HTTP请求销毁时执行的操作
System.out.println("HTTP请求销毁");
}
}
- ServletContextAttributeListener:
- 用于监听
ServletContext
属性的添加、删除和替换事件。 - 实现
ServletContextAttributeListener
接口,重写attributeAdded
、attributeRemoved
和attributeReplaced
方法。
- 用于监听
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
public class MyAttributeListener implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
// 属性添加时执行的操作
System.out.println("ServletContext属性添加:" + event.getName());
}
@Override
public void attributeRemoved(ServletContextAttributeEvent event) {
// 属性删除时执行的操作
System.out.println("ServletContext属性删除:" + event.getName());
}
@Override
public void attributeReplaced(ServletContextAttributeEvent event) {
// 属性替换时执行的操作
System.out.println("ServletContext属性替换:" + event.getName());
}
}
这些监听器接口提供了不同层次和类型的事件监听机制,通过实现相应的接口,可以在Web应用中捕获各种事件,执行相关的逻辑操作。在Java中,这种观察者模式的应用使得对象之间的耦合度降低,提高了系统的可维护性和可扩展性。