zoukankan      html  css  js  c++  java
  • Listener

    Listener 监听器

    一 监听器内部原理:其实就是接口回调

    需求:A在执行循环,当循环到5的时候,通知B

    事先先把某一个对象传递给A ,当A执行到5的时候,通过这个对象来调用B中的方法

    但是不是直接传递B的实例,而是传递一个B所实现的接口过去。未来的类只要实现这个接口,都能被A调用。

     

    二、 监听器的三个作用域的销毁和创建

    web监听器:8个,划分成三种类型

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

    •   *监听三个作用域属性状态变更

    •   *监听httpSession里面存值状态变更

    *步骤:

    1. 定义一个类,实现接口
    2. 注册|配置监听器
    3. <listener>
      <listener-class>com.listener.MyContextListener</listener-class>
      </listener>

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

    //pageContext(作用域当前页面)

    • request   ---HttpServletRequst
    • session  ----HttpSession
    • application  ---ServletContext

    1. ServletContextListener   

        ServletContext创建: 

    •        启动tomcat服务器的时候

      ServletContext销毁:

    •         关闭服务器
    •         从服务器移除项目

        ServletContext作用:

    1. 在ServletCOntext创建的时候,完成自己想要的初始化工作
    2. 执行自定义任务调度,执行某一个任务

    2. ServletRequestListener  

        request创建:访问服务器上的任何资源

    •        访问html  
    •        访问JSP
    •        访问Servlet

     request销毁:

    • 服务器对这次请求做出了响应,request销毁

        ServletRequestListener 作用: 

    3. HttpSessionListener

      session的创建:

    • 只要调用了getSession
    • html:不会
    • jsp:会
    • servlet:会( request.getSession())

      session的销毁 : 

    • 超时 30分钟 
    • 正常关闭服务器(序列化)   
    • 非正常关闭  销毁 

    HttpSessionListener作用: 统计在线人数

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

    • servletContext   --- ServletContextAttributeListener 
    • request  --- ServletRequestAttributeListener
    • session  --- HttpSessionAttributeListener
    • 可以监听在作用域中值 添加 | 替换 | 移动的动作

     *监听httpSession里面存值状态变更,钝化和活化

    这类监听器不用注册,1 让JavaBean实现该接口即可,活化还需要实现序列化接口Serializable

    • HttpSessionBindingListener:绑定和解除绑定(session.setAtt  &  session.removeAtt)
    • @Override
      public void valueBound(HttpSessionBindingEvent event) {
      System.out.println("HttpSessionBindingEvent.valueBound对象被绑定进来");
      }

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

    • HttpSessionActivationListener:钝化和活化
    • 用于监听session的值是钝化(序列化)还是活化(反序列化)的动作
    • 序列化(钝化):把内存中的数据存储到硬盘,关闭服务器时钝化
    • 反序列化(活化):把硬盘中的数据读取到内存中
    • 作用:session的值可能会很多,并且我们有很长一段时间不使用这个内存中的值,可以考虑到钝化到硬盘,要使用的时候在活化到内存。
    • 如何让session在一定的时间内钝化?
    • 1.在/conf/context.xml里面配置(对所有运行在服务器的项目生效),或者在/conf/catalina/localhost/context.xml里面配置(对localhost生效)
    • 2.在自己的web工程项目中的META-INF/context.xml(只对当前的工程生效)
    • maxIdleSwap:1分钟不用即被钝化   directory:钝化后文件存放的目录位置(workCatalinalocalhost9ListenerAndFilteritsession)
    • <Context>
      <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
      <Store className="org.apache.catalina.session.FileStore" directory="it315"/>
      </Manager>
      </Context>

  • 相关阅读:
    第六周作业
    第二次作业
    自我介绍
    2019春总结作业
    2019春第四次课程设计实验报告
    2019春第三次课程设计实验报告
    2019春第二次课程设计实验报告
    2019春第一次课程设计实验报告
    第十二周编程总结
    第十一周编程总结
  • 原文地址:https://www.cnblogs.com/ltfxy/p/10252767.html
Copyright © 2011-2022 走看看