事件分为三个部分:
事件源:事件发生的场所,比如tomcat事件:ServletContextEvent事件处理器:ServletContextListener,也就是监听器 contextDestroyed(ServletContextEvent sce) contextInitialized(ServletContextEvent sce)只要servlet容器实列化ServletContext对象,contextInitialized()方法自动调用 只要Servlet容器销毁ServletContext对象,contextDestroyed()自动调用
其实不止ServletContext对象有监听器,session什么的也都有,查询API便可以知道。
实现步骤:
编写事件处理器,实现处理器接口 注册给Servlet容器配置xml:
<web-app> <listener> <listener-class>com.oracle.WebinitListener</listener-class> </listener> </web-app>也可以用Annotation:
@WebListener两个简单的Listener: ServletContextListener:
package com.listener; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class ServletContextListenerDemo implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { //当容器销毁时,回调此方法 System.out.println("销毁ServletContext........."); } @Override public void contextInitialized(ServletContextEvent arg0) { System.out.println("初始化ServletContext.............."); //当容器初始化ServletContext 回调此方法 // DBpool db=new DBPool(); ServletContext sc=arg0.getServletContext(); //ArticleDao ad=new ArticleDaoImp(); //sc.setAttribute("articleDao",ad); sc.setAttribute("pool","pool"); } }ServletContextAttributeListener:
package com.listener; import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletContextAttributeListener; import javax.servlet.annotation.WebListener; @WebListener public class ServletContextAttrDemo implements ServletContextAttributeListener { @Override public void attributeAdded(ServletContextAttributeEvent arg0) { System.out.println("在servletContext中加了一个属性:"+arg0.getName()+"--"+arg0.getValue()); } @Override public void attributeRemoved(ServletContextAttributeEvent arg0) { System.out.println("在servletContext中删除了一个属性:"+arg0.getName()+"--"+arg0.getValue()); } @Override public void attributeReplaced(ServletContextAttributeEvent arg0) { System.out.println("在servletContext中替换一个属性:"+arg0.getName()+"--"+arg0.getValue()); } }我们也可以在listener中加入代码,实现我们需要的功能。