当web应用在web容器中运行时,web应用内部会不断发生各种事件:如web应用被启动、被停止、用户session开始、session结束等。通常来说,这些web事件对开发者是透明的。通过实现Listener接口,可以方便地监听这些事件。
创建一个Listener只需两个步骤:1.创建Listener处理类;2.web.xml中配置Listener 或 采用注解形式。
常用的web事件监听器接口有下面几个:
ServletContextListener:用于监听web应用被启动、被停止。
ServletRequestListener:用于监听用户请求。
创建一个Listener只需两个步骤:1.创建Listener处理类;2.web.xml中配置Listener 或 采用注解形式。
常用的web事件监听器接口有下面几个:
ServletContextListener:用于监听web应用被启动、被停止。
ServletRequestListener:用于监听用户请求。
ServletSessionListener:用于监听用户Session的开始与结束。
下面的代码将创建一个数据库连接的Listener,该Listener会在应用启动时获取数据库连接,并将获取到的链接设置成为application范围内的属性。
import java.sql.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
@WebListener
public class GetConnListener implements ServletContextListener
{
// 应该启动时,该方法被调用。
public void contextInitialized(ServletContextEvent sce)
{
try
{
// 取得该应用的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");
// 注册驱动
Class.forName(driver);
// 获取数据库连接
Connection conn = DriverManager.getConnection(url
, user , pass);
// 将数据库连接设置成application范围内的属性
application.setAttribute("conn" , conn);
}
catch (Exception ex)
{
System.out.println("Listener中获取数据库连接出现异常"
+ ex.getMessage());
}
}
// 应该关闭时,该方法被调用。
public void contextDestroyed(ServletContextEvent sce)
{
// 取得该应用的ServletContext实例
ServletContext application = sce.getServletContext();
Connection conn = (Connection)application.getAttribute("conn");
// 关闭数据库连接
if (conn != null)
{
try
{
conn.close();
}
catch (SQLException ex)
{
ex.printStackTrace();
}
}
}
}