11.5_Listener

一、什么是Listener?

  Listener是java所特有的事件处理机制的结果,也就是常说的监听器。

二、能做什么事?

  监听某一个事件的发生。 状态的改变。


三、监听器的内部机制

  其实就是接口回调

四、Web监听器

  总共有8个 划分成三种类型

   1. 定义一个类,实现接口

   2. 注册 | 配置监听器

   监听三个作用域创建和销毁

    request ---httpServletRequest
    session ---httpSession
    aapplication --- ServletContext

    1. ServletContextListener

      servletcontext创建:

        1. 启动服务器的时候

      servletContext销毁:

        2. 关闭服务器. 从服务器移除项目

    2. ServletRequestListener

      request创建:

      访问服务器上的任意资源都会有请求出现。

      访问 html: 会
      访问 jsp: 会
      访问 servlet : 会

      request销毁:

      服务器已经对这次请求作出了响应。


        public class MyRequestListener implements ServletRequestListener {
          @Override
          public void requestDestroyed(ServletRequestEvent sre) {
            System.out.println("servletrequest 销毁了");
            }

          @Override
          public void requestInitialized(ServletRequestEvent sre) {
            System.out.println("servletrequest 初始化了");
            }
          }


        <listener>
        <listener-class>com.itheima.listener.MyRequestListener</listener-class>
        </listener>

  3. HttpSessionListener

    session的创建
    只要调用getSession

    html: 不会
    jsp: 会 getSession();
    servlet: 会

    session的销毁
    超时 30分钟

    非正常关闭 销毁

    正常关闭服务器(序列化)

    public class MySessionListener implements HttpSessionListener {

      @Override
      public void sessionCreated(HttpSessionEvent se) {
        System.out.println("创建session了");
      }
  
      @Override
      public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("销毁session了");
        }
      }

      作用:

      ServletContextListener

      利用它来,在servletcontext创建的时候,
      1. 完成自己想要的初始化工作

      2. 执行自定义任务调度。 执行某一个任务。 Timer

      HttpSessionListener

     统计在线人数.


五、监听三个作用域属性状态变更


  可以监听在作用域中值 添加 | 替换 | 移除的动作。

    * servletContext --- ServletContextAttributeListener
      

    * request --- ServletRequestAttributeListener
        

    * session --- HttpSessionAttributeListener
    

六、监听httpSession里面存值的状态变更

  这一类监听器不用注册。

    HttpSessionBindingListener

  监听对象与session 绑定和解除绑定 的动作

    1. 让javaBean 实现该接口即可

    @Override
    public void valueBound(HttpSessionBindingEvent event) {
      System.out.println("对象被绑定进来了");
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
      System.out.println("对象被解除绑定");
    }

    HttpSessionActivationListener  

     用于监听现在session的值 是 钝化 (序列化)还是活化 (反序列化)的动作

     钝化 (序列化)

     把内存中的数据 存储到硬盘上

     活化 (反序列化)

    把硬盘中的数据读取到内存中。


    session的钝化活化的用意何在

    session中的值可能会很多, 并且我们有很长一段时间不使用这个内存中的值, 那么可以考虑把session的值可以存储到硬盘上【钝化】,等下一次在使用的时候,在从硬盘上提取出来。 【活化】

    如何让session的在一定时间内钝化.

     做配置即可

    1. 在tomcat里面 conf/context.xml 里面配置

      对所有的运行在这个服务器的项目生效

    2. 在conf/Catalina/localhost/context.xml 配置

      对 localhost生效。 localhost:8080

    3. 在自己的web工程项目中的 META-INF/context.xml

      只对当前的工程生效。

      maxIdleSwap : 1分钟不用就钝化
      directory : 钝化后的那个文件存放的目录位置。

      D:\tomcat\apache-tomcat-7.0.52\work\Catalina\localhost\ListenerDemo\itheima

      <Context>
        <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
        <Store className="org.apache.catalina.session.FileStore" directory="itheima"/>
        </Manager>
      </Context>

猜你喜欢

转载自www.cnblogs.com/zyyzy/p/12618911.html