JavaWeb中的监听器Listener

1、监听器的使用时机

当某个事件发生时候,监听器里的方法会被调用。例如Tomcat容器启动时、销毁时,session创建时、销毁时。也就是说发生某个事件时,监听器会起作用。

2、常用的监听器

开发中比较常用的监听器有ServletContextListener上下文监听和HttpSessionListener会话监听。

2.1、ServletContextListener

这个监听器是监听ServletContext对象的生命周期,也就是监听Web应用的生命周期,当Web应用启动和终止时,都会触发这个监听器,执行监听器里面的方法。

javax.servlet.ServletContextListener接口源码:
在这里插入图片描述
这个接口继承自EventListener接口。
在这里插入图片描述
只有上下文初始化和上下文销毁这两个方法,接受的参数为ServletContextEvent类型。
在这里插入图片描述
使用上下文监听时,只需要实现ServletContextListener接口,覆写里面的两个方法就行了,如下:

/*
 * 这个监听器监听上下文的路径
 */
public class StartupListener implements ServletContextListener{

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("监听器初始化!");
        // 获取上下文对象
        ServletContext servletContext = sce.getServletContext();
        // 获取应用的路径
        String path = servletContext.getContextPath();
        // 存到上下文作用域中
        servletContext.setAttribute("APP_PATH", path);
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("监听器摧毁!");     
    }

}

然后在web.xml中配置该监听器:
在这里插入图片描述
启动应用:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实际上,web应用启动时会执行contextInitialized方法,应用关闭时,会执行contextDestroyed方法。

2.2、HttpSessionListener

这个监听器是监听Session对象的,每当有Session对象创建或销毁时,都会触发这个监听器,执行里面的方法,这个监听器常用来统计web应用的在线人数。

javax.servlet.http.HttpSessionListener接口的源码:
在这里插入图片描述
接口中两个方法,Session对象的创建和销毁,使用这个监听器,只需要实现HttpSessionListener接口,覆写接口的方法就行了。如下:

/*
 * session对象的监听器
 *    用于统计在线人数
 */
public class HttpSessionListenerImpl implements HttpSessionListener{

    // 创建session时
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("创建新的Session对象!");
        // 用户进入时,获取session对象
        HttpSession session = se.getSession();
        // 获取上下文对象
        ServletContext context = session.getServletContext();
        Object obj = context.getAttribute("onlineNumber");
        // 为空则是第一个用户
        if(obj==null){
            context.setAttribute("onlineNumber", new Integer(1));
        } else { // 不为空,往上累加
          context.setAttribute("onlineNumber", new Integer(obj.toString()) + 1);   
        }
    }

    // 销毁session对象时
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("销毁Session对象!");
        // 用户退出时
        HttpSession session = se.getSession();
        ServletContext context = session.getServletContext();
        Object obj = context.getAttribute("onlineNumber");
        // 用户退出,人数减1
        context.setAttribute("onlineNumber", new Integer(obj.toString()) - 1);
        
    }

}

然后在web.xml里配置该监听器:
在这里插入图片描述
比如用户登录时:
在这里插入图片描述
用户退出时:
在这里插入图片描述
当应用中有新的session对象创建时,会执行sessionCreated方法,当有session对象销毁时,会执行sessionDestroyed方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值