1.Listener监听器
[!tip]
JavaEE三大组件:
Servlet程序
,Filter过滤器
,Listener监听器
[!note]
在JavaWeb中,监听器(Listener)是一种特殊的组件,它用于监听Web应用程序中的事件,并在事件发生时执行相应的代码。监听器提供了一种方便的机制,用于在特定事件发生时执行预定义的逻辑,例如在应用程序启动或关闭时执行初始化或清理操作,在会话创建或销毁时执行一些处理等。
以下是JavaWeb中常见的几种监听器类型:
-
ServletContextListener(Servlet上下文监听器):
实现了
ServletContextListener
接口的监听器类可以监听Web应用程序的生命周期事件。当Web应用程序启动或关闭时,容器会触发相应的事件,并调用监听器中定义的方法。 -
ServletRequestListener(Servlet请求监听器):
实现了
ServletRequestListener
接口的监听器类可以监听ServletRequest对象的创建和销毁事件。每当请求到达或离开Servlet时,容器会触发相应的事件,并调用监听器中定义的方法。 -
HttpSessionListener(会话监听器):
实现了
HttpSessionListener
接口的监听器类可以监听HttpSession对象的创建和销毁事件。每当会话创建或销毁时,容器会触发相应的事件,并调用监听器中定义的方法。 -
HttpSessionAttributeListener(会话属性监听器):
实现了
HttpSessionAttributeListener
接口的监听器类可以监听HttpSession对象中属性的增加、删除和替换事件。每当会话属性发生变化时,容器会触发相应的事件,并调用监听器中定义的方法。
通过实现这些监听器接口,开发人员可以针对特定的事件编写相应的处理代码,从而实现一些与Web应用程序相关的逻辑,如资源初始化、日志记录、权限控制、会话管理等。监听器提供了一种松耦合的设计方式,使得应用程序的各个组件能够更灵活地协作和交互。
2.ServletContextListener
[!tip]
使用步骤
- 编写一个类实现ServletContextListener接口
- 实现两个回调方法
- 到web.xml中配置监听器
[!tip]
在Servlet 3.0及更高版本中,可以使用注解的方式来注册监听器
@WebListener public class MyServletContextListenerImpl01 implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("ServletContext1对象被创建"); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("ServletContext1对象被销毁"); } }
要使用ServletContextListener
,你需要完成以下步骤:
- 创建一个实现
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应用程序销毁");
}
}
- 在web.xml文件中配置监听器:在
web.xml
文件中,将你的监听器类配置为<listener>
元素的子元素。例如:
<web-app>
<!-- 配置监听器 -->
<listener>
<listener-class>com.example.MyServletContextListener</listener-class>
</listener>
</web-app>
这样,当Web应用程序启动或关闭时,容器会自动创建你的监听器实例,并在适当的时候调用contextInitialized()
和contextDestroyed()
方法。
在contextInitialized()
方法中,你可以执行一些初始化操作,比如加载配置文件、连接数据库、初始化资源等。而在contextDestroyed()
方法中,你可以执行一些清理操作,如关闭数据库连接、释放资源等。