javawebListener是由一系列的接口来组成(并没有继承关系),需要我们自行定义类并实现接口,并在web.xml中加以配置,由tomcat在事件发生的时候,自动调用接口中的方法。

Listener组件同样使用了流行的事件委托机制,即事件源(如ServletContext,Session)接收事件请求,当事件发生的时候,将事件处理逻辑委托给注册在其上的监听器,并将事件对象传入到监听器的接口方法中。

下面我用ServletContextListener举例说明此问题:

1、定义监听器类:

public class MyContextListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("ServletConext销毁方法");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("ServletConext产生的方法");
}
}

其中的方法将在ServletContext(事件源)在产生和销毁时,由tomcat自动调用。

2、配置:

<listener>
<listener-class>listener.MyContextListener</listener-class>
</listener>

该配置相当在把监听器在事件源上(ServletContext)进行注册。

3、工作过程:当tomcat启动项目时,会根据web.xml的配置将监听器进行实例化,并将监听器注册在事件源上,当事件源(ServletContext)有相应事件产生时,会由Tomcat进行自动调用接口方法,并实例化一个事件对象(ServletContextEvent),传入到方法中。