前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Listener

Listener

作者头像
晚上没宵夜
发布2020-03-10 09:15:08
4130
发布2020-03-10 09:15:08
举报
文章被收录于专栏:Howl同学的学习笔记

1. Listener

监听器也是一个接口,实现该接口的类会监听其他类的方法调用或属性改变,当发生被监听的事件后,监听器将执行指定的方法,而且不需要像监听器模式那样亲自向事件源注册,Tomcat服务器已经帮我们完成了

1.1 监听的对象

ServletContext,HttpSession,ServletRequest

1.2 监听的事件

监听对象的创建和销毁,监听对象属性变化,监听Session内的对象

1.3 具体分类:

监听对象的创建和销毁

HttpSessionListener、ServletContextListener、ServletRequestListener,里面方法有:Destroyed(),Initialized()

监听对象属性变化

ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttributeListener,里面方法有:attributeAdded(),attributeRemoved(),attributeReplaced() 监听Session内的对象

HttpSessionActivationListener、HttpSessionBindingListener,实现这两个接口并不需要在web.xml文件中注册,因为是让里面的对象自己监听自己,并且对象需要实现序列化接口,里面方法有:valueBound(),valueUnbound(),sessionDidActivate(),sessionWillPassivate()

Web.xml配置

代码语言:javascript
复制
<listener>
    <listener-class>listener.ListenerTest</listener-class>
</listener>

2. 测试

2.1 监听对象的创建和销毁

代码语言:javascript
复制
public class ListenerTest implements HttpSessionListener, ServletContextListener, ServletRequestListener {

    public void requestDestroyed(ServletRequestEvent arg0) {
        System.out.println("请求销毁了");
    }

    public void requestInitialized(ServletRequestEvent arg0) {
        System.out.println("请求初始化了");
    }

    public void contextDestroyed(ServletContextEvent arg0) {
        System.out.println("容器销毁了");
    }

    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("容器初始化了");
    }

    public void sessionCreated(HttpSessionEvent arg0) {
        System.out.println("Session创建了");
    }

    public void sessionDestroyed(HttpSessionEvent arg0) {
        System.out.println("Session销毁了");
    }
代码语言:javascript
复制
容器初始化了
请求初始化了
Session创建了
# Session是在内存中,不在JVM里,所以看不到销毁
请求销毁了
容器销毁了

2.2 监听对象属性变化(这里举例Session)

代码语言:javascript
复制
//增加
httpSession.setAttribute("Session", "Howl");
    
//替换
httpSession.setAttribute("Session", "Howlet");
    
//移除
httpSession.removeAttribute("Session");
代码语言:javascript
复制
public class ListenerTest2 implements HttpSessionAttributeListener {

    public void attributeAdded(HttpSessionBindingEvent arg0) {
        System.out.println("Session属性增加了");
    }

    public void attributeRemoved(HttpSessionBindingEvent arg0) {
        System.out.println("Session属性移除了");
    }

    public void attributeReplaced(HttpSessionBindingEvent arg0) {
        System.out.println("Session属性替换了");
    }
}    
代码语言:javascript
复制
Session属性增加了
Session属性替换了
Session属性移除了

2.3 监听Session内的对象

代码语言:javascript
复制
public class UserBean implements Serializable, HttpSessionActivationListener, HttpSessionBindingListener {

    private String name;
    
    public UserBean(String name) {
        this.name = name;
    }

    public void valueBound(HttpSessionBindingEvent arg0) {
        System.out.println("绑定了对象");
    }

    public void valueUnbound(HttpSessionBindingEvent arg0) {
        System.out.println("移除了对象");
    }

    public void sessionDidActivate(HttpSessionEvent arg0) {
        HttpSession httpSession = arg0.getSession();
        System.out.println("活化了");
    }

    public void sessionWillPassivate(HttpSessionEvent arg0) {
        HttpSession httpSession = arg0.getSession();
        System.out.println("钝化了");
    }
}    
代码语言:javascript
复制
UserBean user = new UserBean("Howl");
    
request.getSession().setAttribute("user", user);
request.getSession().removeAttribute("user");
代码语言:javascript
复制
绑定了对象
<!-- 关闭服务器 -->
钝化了
<!-- 开启服务器 -->
活化了
移除了对象

作用

统计用户人数

监听用户上线与退出

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-12-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Listener
    • 1.1 监听的对象
      • 1.2 监听的事件
        • 1.3 具体分类:
        • 2. 测试
          • 2.1 监听对象的创建和销毁
            • 2.2 监听对象属性变化(这里举例Session)
              • 2.3 监听Session内的对象
              • 作用
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档