ServletContextListener是對ServeltContext的一個監聽.servelt容器啟動,serveltContextListener就會調用contextInitialized方法.在方法里面調用event.getServletContext()可以獲取ServletContext,ServeltContext是一個上下文對象,他的數據供所有的應用程序共享,進行一些業務的初始化servelt容器關閉,serveltContextListener就會調用contextDestroyed.
實際上ServeltContextListener是生成ServeltContext對象之后調用的.生成ServeltContext對象之后,這些代碼在我們業務實現之前就寫好,它怎么知道我們生成類的名字.實際上它並不需要知道我們的類名,類里面有是方法.他們提供一個規范,就一個接口,ServeltContextListner,只要繼承這個接口就必須實現這個方法.然后這個類在web.xml中Listener節點配置好.Servelt容器先解析web.xml,獲取Listener的值.通過反射生成對象放進緩存.然后創建ServeltContext對象和ServletContextEvent對象.然后在調用ServletContextListener的contextInitialized方法,然后方法可以把用戶的業務需求寫進去.struts和spring框架就是類似這樣的實現,我們以后寫一些框架也可以在用.
java代碼
package com.chen; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class MyServletContextListener implements ServletContextListener{ @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println("destroyed"); } @Override public void contextInitialized(ServletContextEvent event) { System.out.println("initialized"); event.getServletContext().setAttribute("user", "admin"); } }
xml配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>oa</display-name> <listener> <listener-class>com.chen.MyServletContextListener</listener-class> </listener> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>