1. 程式人生 > >Servlet 監聽器Listener 的執行順序解析說明

Servlet 監聽器Listener 的執行順序解析說明

一、先貼配置檔案 web.xml 的程式碼:

<listener>
		<listener-class>com.zhj.action.MyListener</listener-class>
	</listener>
	<listener>
		<listener-class>com.zhj.action.MyListener2</listener-class>
	</listener>

二、監聽器的程式碼:
public class MyListener implements ServletContextListener{
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
	}
	/**
	 * 容器被建立呼叫該方法
	 */
	@Override
	public void contextInitialized(ServletContextEvent servletContextEvent) {
		System.out.println("MyListener的contextInitialized()");
	}
	public MyListener() {
		System.out.println("MyListener的構造器");
	}
}
public class MyListener2 implements ServletContextListener{
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
	}
	/**
	 * 容器被建立呼叫該方法
	 */
	@Override
	public void contextInitialized(ServletContextEvent servletContextEvent) {
		System.out.println("MyListener2的contextInitialized()");
	}
	public MyListener2() {
		System.out.println("MyListener2的構造器");
	}
}

三、開啟伺服器,後臺的列印結果如下:
MyListener的構造器
MyListener2的構造器
MyListener的contextInitialized()
MyListener2的contextInitialized()

四、結論:

1、在 ServletContext 建立之前,Listener監聽器(包括其他型別監聽器)會先按配置順序初始化;

2、然後 ServletContext 初始化完成後會按照監聽器配置的順序回撥相應的方法,比如 ServletContextListener 的 contextInitialized() 方法。