ServletContextListener简介

在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。

在 ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法:

/***当Servlet 容器启动Web 应用时调用该方法。在调用完该方法之后,容器再对Filter 初始化, * 并且对那些在Web 应用启动时就需要被初始化的Servlet 进行初始化。*/  

contextInitialized(ServletContextEvent sce)  

/***当Servlet 容器终止Web 应用时调用该方法。在调用该方法之前,容器会先销毁所有的Servlet 和Filter 过滤器。 */ contextDestroyed(ServletContextEvent sce)  


下面通过两个具体的例子来介绍 ServletContextListener 的用法。 

例一:在服务启动时,将数据库中的数据加载进内存,并将其赋值给一个属性名,其它的 Servlet 就可以通过 getAttribute 进行属性值的访问。有如下两个步骤:1 : ServletContext 对象是一个为整个 web 应用提供共享的内存,任何请求都可以访问里面的内容 2 :如何实现在服务启动的时候就动态的加入到里面的内容。

我们需要做的有:  

1 ) 实现 servletContextListerner 接口 并将要共享的通过 setAttribute ( name,data )方法提交到内存中去;

2 )应用项目通过 getAttribute(name) 将数据取到 。 

public class ServletContextLTest implements ServletContextListener {
// 实现其中的销毁函数
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("this is last destroyeed");
}
// 实现其中的初始化函数,当有事件发生时即触发
public void contextInitialized(ServletContextEvent sce) { 
ServletContext sct=sce.getServletContext(); 
Map<Integer,String> depts=newHashMap<Integer,String>(); Connection connection=null; PreparedStatement
pstm=null; ResultSet rs=null; 
try{
connection=ConnectTool.getConnection(); String
sql="select deptNo,dname from dept";
pstm=connection.prepareStatement(sql); rs=pstm.executeQuery();
while(rs.next()){ depts.put(rs.getInt(1), rs.getString(2)); } 
// 将所取到的值存放到一个属性键值对中 
sct.setAttribute("dept", depts);
System.out.println("======listener test is beginning=========");
}catch(Exception e){ 
e.printStackTrace(); 
}finally{
ConnectTool.releasersc(rs, pstm, connection); 
} 
}
}

在完成上述编码后,仍需在 web.xml 中进行如下配置,以使得该监听器可以起作用。

<listener><listener-class>ServletContextTest.ServletContextLTest</listener-class></listener>   

在完成上述配置后, web 服务器在启动时,会直接加载该监听器,通过以下的应用程序就可以进行数据的访问。

你可能感兴趣的:(ServletContextListener简介)