实现Listener类

      与AWT事件编程完全相似,监听不同Web事件的监听器也不相同。常用的Web事件监听器接口有以下几个。

  •    ServletContextListener:用于监听Web应用的启动和关闭。
  •    ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变。
  •    ServletRequestListener : 用于监听用户请求。
  •    ServletRequestAttributeListener: 用户监听ServletRequest范围(request)内属性的改变。
  •    HttpSessionListener : 用于监听用户session的开始和结束
  •    HttpSessionAttributeListener: 用于监听HttpSession范围(session)内属性的改变。


      下面先以ServletContextListener为例来介绍Listener的开发和使用,ServletContextListener用于监听 Web 应用的启动和关闭。该Listener类必须实现ServletContextListener 为接口,该接口包含如下两个方法。

  •   contextInitialized(ServletContextEvent sce) :启动 Web 应用时,系统调用 Listener 的该方法。
  •   contextDestroyed(ServletContextEvent sce) :关闭 Web 应用时,系统调用Listener的该方法。

      通过上面的介绍不难看出,ServletContextListener的作用有点类似于load-on-startup Servlet,都可用于在Web应用启动时,回调方法来启动某些后台程序,这些后台程序负责为系统运行提供支持。

  下面将创建一个获取数据库连接的Listener,该Listener会在应用启动时获取数据库连接,并将获取到的连接设置为application范围内的属性。下面是该Listener的代码。

     程序清单:codes\02\2.13\listenerTest\WEB-INF\src\lee\GetConnListener.java

@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();
            }
        }
    }
}

             上面的程序中粗体字代码重写了ServletContextListener的contextInitialized()、contextDestoryed()方法,这两个方法分别在应用启动、关闭时被触发。上面 ServletContextListener 的两个方法分别实现获取数据库连接、关闭数据库连接的功能,这些功能都是为整个Web应用提供服务的。

        程序中斜体字代码用户获取配置参数,细心的读者可能已经发现ServletContextListener获取的是Web应用的配置参数,而不是像Servlet和Filter获取本身的配置参数。这是因为配置Listener时十分简单,只要简单地指定Listener实现类即可,不能配置初始化参数。


web.xml中配置的应用参数:

<!-- 配置第一个参数:driver -->
    <context-param>
        <param-name>driver</param-name>
        <param-value>com.mysql.jdbc.Driver</param-value>
    </context-param>
    <!-- 配置第二个参数:url -->
    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost:3306/javaee</param-value>
    </context-param>
    <!-- 配置第三个参数:user -->
    <context-param>
        <param-name>user</param-name>
        <param-value>root</param-value>
    </context-param>
    <!-- 配置第四个参数:pass -->
    <context-param>
        <param-name>pass</param-name>
        <param-value>32147</param-value>
    </context-param>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值