Listener:监听器的原理和实例

八大监听器:
      ServletRequest对象:
         生命周期监听:ServletRequestListener
         属性监听:ServletRequestAttributeListener
      HttpSession对象:
         生命周期监听:HttpSessionListener
         属性监听:HttpSessionAttributeListener
         对象绑定监听1:HttpSessionBindingListener
         对象钝化活化监听2:HttpSessionActivationListener
      ServletContext对象:
         生命周期监听:ServletContextListener
         属性监听:ServletContextAttributeListener

一、监听对象,主要监听servlet的三大域对象request,session,application(ServletRequest,HttpSession,ServletContext)

监听内容:
        A:监听域对象的创建和销毁,也就是生命周期的监听
        B:监听域对象的属性添加,移除和更改
        C:监听被加入域对象中的对象

二、三大域对象的生命周期
    ServletRequest 什么时候被创建:
        A: 请求一个jsp页面时,tomcat 翻译jsp页面为一个servlet类,执行servlet 类中的service()方法是,tomcat帮我们创建了9大内置对象,其中就有request。
        B: 请求一个servlet时,doGet() 或者是doPost()方法,tomcat 自动也会帮我们创建request,
   ServletRequest 什么时候被销毁:
        执行完service()方法或者 doGet()方法,doPost()方法即销毁

HttSesssion 什么时候被创建:
        Request.getSession():  先判断是否存在session对象,如果存在就直接返回,如果不存在就帮我们创建一个session,然后返回。
    HttSesssion 什么时候被销毁:
       是根据cookie的生命周期来判断的,如果cookie是浏览器生命周期的话,那么浏览器关闭后,session即销毁;如果cookie是保存到文件中的,那么就具体情况,具体对待。
 
    ServletContext 什么时候被创建:
       Tomcat启动项目,即创建了application对象。
    ServletContext 什么时候被销毁:
       Tomcat关闭项目,即销毁了application对象。

三、【实例】
   创建一个监听器
  A:选择一个接口,根据监听对象,监听内容的不同选择不同的接口
  B:在web.xml中添加监听器的配置信息
      <listener>
          <listener-class>监听器文件的相对路径</listener-class>
      </listener>

监听器: HttpSessionAttributeListener
    【原理】
    HttpSessionAttributeListener是对SessionAttribute的监听,当在会话对象中加入属性,移除属性和替换属性时就会触发HttpSessionAttributeListener监

听器。
    接口HttpSessionAttributeListener有3个方法:
    1、public void attributeAdded(HttpSessionBindingEvent sbe){}:该方法在session添加对象是触发
    2、public void attributeRemoved(HttpSessionBindingEvent sbe){}:该方法是在session移除对象时触发的
    3、public voidattributeReplaced(HttpSessionBindingEvent se):在Session属性被重新设置时

【实例】统计一下系统的登录人数
package com.aaa.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionBindingEvent;

@WebListener()
public class Listener2 implements ServletContextListener,
        HttpSessionListener, HttpSessionAttributeListener {

public int count=0;//统计登录的人数

// Public constructor is required by servlet spec
    public Listener2() {
    }

// -------------------------------------------------------
    // ServletContextListener implementation
    // -------------------------------------------------------
    public void contextInitialized(ServletContextEvent sce) {
      /* This method is called when the servlet context is
         initialized(when the Web application is deployed).
         You can initialize servlet context related data here.
      */
    }

public void contextDestroyed(ServletContextEvent sce) {
      /* This method is invoked when the Servlet Context
         (the Web application) is undeployed or
         Application Server shuts down.
      */
    }

// -------------------------------------------------------
    // HttpSessionListener implementation
    // -------------------------------------------------------
    public void sessionCreated(HttpSessionEvent se) {
        /* Session is created. */
    }

public void sessionDestroyed(HttpSessionEvent se) {
        /* Session is destroyed. */
    }

// -------------------------------------------------------
    // HttpSessionAttributeListener implementation
    // -------------------------------------------------------

public void attributeAdded(HttpSessionBindingEvent sbe) {
      /* This method is called when an attribute
         is added to a session.
      */
     //session对象中加入属性了触发此方法
     //sbe.getName()得到session里的属性名
      if(sbe.getName().equals("user")){
         count++;
         //将count放在全局域对象ServletContext里
         sbe.getSession().getServletContext().setAttribute("count",count);
         System.out.println("现在系统登录的用户人数"+count);
       }
       
    }

public void attributeRemoved(HttpSessionBindingEvent sbe) {
      /* This method is called when an attribute
         is removed from a session.
      */
      //session对象中删除属性时触发此方法
      if(sbe.getName().equals("user")){
           count--;
           sbe.getSession().getServletContext().setAttribute("count",count);
           System.out.println("现在系统登录的用户人数"+count);
       }
    }

public void attributeReplaced(HttpSessionBindingEvent sbe) {
      /* This method is invoked when an attibute
         is replaced in a session.
      */
    }
}

转载于:https://www.cnblogs.com/fbbg/p/11099169.html

Listener--------监听器相关推荐

  1. Listener 监听器

    Listener 监听器 前言:之前写了一篇关于Filter的文章:http://tianweili.github.io/blog/2015/01/26/java-filter/,现在再来一篇List ...

  2. 【Servlet】Java Serlvet Listener 监听器

    Listener监听器 Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理 容器产生的事件分类- 生命周期相关的事件- 设置和删除Attribute数据相关 ...

  3. 第 8 章 配置listener监听器

    第 8 章 配置listener监听器 注意 还记得我们之前讲过的在线列表吗?第 4.2 节 "例子:在线列表".我们曾经说过那个在线列表无法判断用户非法退出,很可能造成在线列表无 ...

  4. Filter(过滤器)、Listener(监听器)

    一: 过滤器: 可以把"不和谐"的东西给过滤掉 01.过滤器概述 生活中的过滤器:带有过滤功能的净水器,滤纸,香烟的过滤嘴,测试,丈母娘.程序中的过滤器:在JAVA中最小的程序单元 ...

  5. javaweb(11) Listener监听器与Filter过滤器

    javaweb(11) Listener监听器与Filter过滤器 Listener监听器 什么是Listener监听器 Listener 监听器它是 JavaWeb 的三大组件之一.JavaWeb ...

  6. Filter 过滤器和 Listener 监听器,java面试必问底层

    一.Filter 过滤器 1.概述 2.开发步骤 3.过滤器执行流程 4.过滤器生命周期 5.过滤器配置问题 6.过滤器链(配置多个过滤器) [二.Listener 监听器]( <一线大厂Jav ...

  7. Java中的Listener监听器与Ajax技术和Axios异步框架以及JSON传递接收数据

    Listener监听器与Ajax Listener 概念 Listener 表示监听器,是 JavaWeb 三大组件(Servlet.Filter.Listener)之一. 监听器可以监听就是在 ap ...

  8. web核心 8-filter过滤器 listener监听器 相对路径 绝对路径 项目名路径

    内容介绍 1.Filter过滤器 2.listener监听器 Filter过滤器 概述 web服务器端有三大技术:Servlet Filter Listener Servlet:本质上是一个类,这个类 ...

  9. Listener(监听器)的简单介绍

    Listener(监听器)的作用和内部机制 作用:监听某个事件的发生,状态的改变 内部机制:接口回调 八个web监听器 实现监听: 创建类实现监听器接口 web.xml文件中配置(注册)监听器< ...

  10. Listener(监听器)详解

    Listener(监听器)详解 作用:监听某个事件的发生,状态的改变 内部机制:接口回调 监听器用于监听Web应用中某些对象的创建.销毁.增加,修改,删除等动作的发生,然后作出相应的响应处理.当监听范 ...

最新文章

  1. python将控制台输出保存至文件
  2. java 日期的加减_用java实现日期类的加减
  3. slice_input_producer在2.0版本里怎么用_用Gan生成一维数据(附代码)
  4. Kubernetes Nginx Ingress 安装与使用
  5. RPC框架原理及从零实现系列博客(二):11个类实现简单RPC框架
  6. 人工智能实战_第三次作业_陈泽寅
  7. linux下重新分区、数据备份相关(parted、dd等命令)
  8. ajax post form表单提交中文乱码,ajax XMLHTTP Post Form时的表单乱码综合解决
  9. ubuntu安装opencv4.X+opencv_contrib教程(c++)
  10. 怎么在Excel中快速将英文翻译为中文
  11. 痞子衡嵌入式:ARM Cortex-M内核那些事(3.2)- 安全模块看特性(M23/33/35P)
  12. 联想Win10安装Ubuntu双系统教程
  13. 解决Ubuntu DVD 用wubi 安装时候要重新下载镜像的笨方法
  14. 蓝牙连接打印机打印资产标签.
  15. 打开浏览器时主页被锁定怎么也改不掉的一个好办法
  16. 智慧校园:校务助手微信小程序端源码
  17. Acer传奇Go电脑开机几分钟就会蓝屏怎么重装系统?
  18. 自定义notepad++ --添加插件SourceCookifier
  19. PHP面试题2021和2022面试、跳槽必备大全!
  20. 23种设计模式——UML类图+简要分析+例题

热门文章

  1. linux环境中通过useradd命令,创建用户的时候指定用户的base-dir
  2. 2017甲骨文JavaOne参会感想
  3. [C#] C# 知识回顾 - 装箱与拆箱
  4. 【java】map的几种遍历方式
  5. 二十六个月Android学习工作总结
  6. PHD considerations
  7. Another Rejection from University of Oxford MRes in Engineering
  8. SWIFT入门 Dictionary
  9. CodeForces - 1029B.Creating the Contest(最长上升子序列0(n)解法)
  10. 第4章:介绍python对象类型/4.1 python的核心数据类型/4.7 集合