监听器
事件分为三个部分:
- 事件源:事件发生的场所,比如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中加入代码,实现我们需要的功能。