• Java监听器知识点总结-DX的笔记


    什么是监听器?

    • 监听器是可以监听域对象的创建和销毁以及属性的改变的类
    • 可以监听三个域对象和他们的属性:
      • servletContext
      • session
      • request
      • 可以监听域对象的属性的添加、删除和修改
      • 必须实现特定的接口才能具备监听功能
    • 监听器能干什么?
      • 比如监听session的创建、对属性的操作、销毁等
      • 通过监听器可以在不影响业务代码的情况下完成一些功能
      • 比如统计网站的在线人数,就可以使用监听器监听session对象来实现

    监听器的具体实现

    配置监听器

    • 方式一:web.xml文件中配置

      <listener>
      	<listener-class>com.java.listener.FirstListener</listener-class>
      </listener>
      
      • 1
      • 2
      • 3
    • 方式二:在类名上面使用注解

      @WebListener
      
      • 1

    监听ServletContext

    @WebListener
    public class OnlineHttpServletContextListener implements ServletContextListener{
        @Override
        public void contextInitialized(ServletContextEvent sce) {
            //存用户
            ArrayList<String> userList = new ArrayList<>();
            ServletContext servletContext = sce.getServletContext();
            servletContext.setAttribute("onlineList",userList);
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent servletContextEvent) {
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    监听Session

    @WebListener
    public class OnlineHttpSessionListener implements HttpSessionListener {
        @Override
        public void sessionCreated(HttpSessionEvent se) {
            System.out.println("session对象创建啦。。。。。");
        }
    
        @Override
        public void sessionDestroyed(HttpSessionEvent se) {
            System.out.println("session对象销毁啦!!!");
            String name = (String) se.getSession().getAttribute(ConstantData.LOGIN_USER);
            ServletContext servletContext = se.getSession().getServletContext();
            List<String> userList = (List<String>) servletContext.getAttribute("onlineList");
            userList.remove(name);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    监听SessionAttribute的变化

    @WebListener
    public class OnlineHttpSessionAttributeListener implements HttpSessionAttributeListener {
        @Override
        public void attributeAdded(HttpSessionBindingEvent se) {
            
            String name = se.getName();
            if (name.equals(ConstantData.LOGIN_USER)) {
                String value = (String) se.getValue();
                List<String> userList = (List<String>) se.getSession().getServletContext().getAttribute("onlineList");
                userList.add(value);
            }
        }
    
        @Override
        public void attributeRemoved(HttpSessionBindingEvent se) {
    
            String name = se.getName();
            if (name.equals(ConstantData.LOGIN_USER)) {
                String value = (String) se.getValue();
                List<String> userList = (List<String>) se.getSession().getServletContext().getAttribute("onlineList");
                userList.remove(value);
            }
        }
    
        @Override
        public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
  • 相关阅读:
    商场应急管理系统:SpringBoot技术构建
    MySQL 中的反斜杠 \\,我上当了
    CTO 说了,用错@Autowired 和@Resource 的人可以领盒饭了
    网站服务器怎么部署
    机器学习-数值特征
    ffmpeg源码阅读之avformat_alloc_output_context2
    R 复习 菜鸟教程
    安全生产:CVE-2020-11022/CVE-2020-11023漏洞解析
    上班做“副业”被解雇?靠这份Alibaba通关面试手册成功翻身了
    在博客园随笔中插入3D分子模型
  • 原文地址:https://blog.csdn.net/qq_43528471/article/details/125628451