Listener可以监听容器中某一执行动作,并根据其要求做出相应的响应。
常用的Web事件的监听接口如下:
ServletContextListener:用于监听Web的启动及关闭
ServletContextAttributeListener:用于监听ServletContext范围内属性的改变
ServletRequestListener:用于监听用户请求
ServletRequestAttributeListener:用于监听ServletRequest范围属性的改变
HttpSessionListener:用于监听用户session的开始及结束
常用的Web事件的监听接口如下:
ServletContextListener:用于监听Web的启动及关闭
ServletContextAttributeListener:用于监听ServletContext范围内属性的改变
ServletRequestListener:用于监听用户请求
ServletRequestAttributeListener:用于监听ServletRequest范围属性的改变
HttpSessionListener:用于监听用户session的开始及结束
HttpSessionAttributeListener:用于监听HttpSession范围内的属性改变
对于ServeletContextListener通常用来在应用开始或结束时执行某些动作,常用来执行定时任务
使用前首选需要在web.xml中配置相应的Listener,下面的例子展示了通过ServeletContextListener进行数据库连接的操作
package listener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 监听Web应用启动及关闭
* @author xieyongxue
*
*/
public class GetConnListener implements ServletContextListener{
//应用关闭时,此方法被调用
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
ServletContext application=sce.getServletContext();
Connection conn=(Connection) application.getAttribute("conn");
if (conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//应用启动时,此方法被调用
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
//获取到该应用的ServletContext的实例
ServletContext application=sce.getServletContext();
//获取数据库驱动
String driver=application.getInitParameter("driver");
//加载数据库连接URL
String url=application.getInitParameter("url");
//获取登录数据库的名称
String user=application.getInitParameter("user");
//获取连接数据库的密码
String pass=application.getInitParameter("pass");
try {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("加载数据库驱动失败!"+e.toString());
e.printStackTrace();
}
Connection conn= DriverManager.getConnection(url, user, pass);
//将数据库连接设置成application的属性
application.setAttribute("conn", conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("连接数据库失败!"+e.toString());
e.printStackTrace();
}
}
}