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:钝化后文件存放的目录位置(\work\Catalina\localhost\9ListenerAndFilter\itsession)
  • <Context>
    <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
    <Store className="org.apache.catalina.session.FileStore" directory="it315"/>
    </Manager>
    </Context>

十九 Listener的更多相关文章

  1. spring boot / cloud (十九) 并发消费消息,如何保证入库的数据是最新的?

    spring boot / cloud (十九) 并发消费消息,如何保证入库的数据是最新的? 消息中间件在解决异步处理,模块间解耦和,和高流量场景的削峰,等情况下有着很广泛的应用 . 本文将跟大家一起 ...

  2. 无废话ExtJs 入门教程十九[API的使用]

    无废话ExtJs 入门教程十九[API的使用] extjs技术交流,欢迎加群(201926085) 首先解释什么是 API 来自百度百科的官方解释:API(Application Programmin ...

  3. Python之路【第十九章】:Django进阶

    Django路由规则 1.基于正则的URL 在templates目录下创建index.html.detail.html文件 <!DOCTYPE html> <html lang=&q ...

  4. Bootstrap <基础二十九>面板(Panels)

    Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...

  5. Bootstrap <基础十九>分页

    Bootstrap 支持的分页特性.分页(Pagination),是一种无序列表,Bootstrap 像处理其他界面元素一样处理分页. 分页(Pagination) 下表列出了 Bootstrap 提 ...

  6. Web 开发人员和设计师必读文章推荐【系列二十九】

    <Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  7. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十九】

    <Web 前端开发精华文章推荐>2013年第七期(总第十九期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...

  8. Python之路【第十九篇】:爬虫

    Python之路[第十九篇]:爬虫   网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...

  9. KALI LINUX WEB 渗透测试视频教程—第十九课-METASPLOIT基础

    原文链接:Kali Linux Web渗透测试视频教程—第十九课-metasploit基础 文/玄魂 目录 Kali Linux Web 渗透测试视频教程—第十九课-metasploit基础..... ...

随机推荐

  1. java中使用静态字段和构造函数跟踪某个类所创建对象的个数

    对于这个问题,我们都知道java中使用类时会自动调用构造函数.按照这个思路我们可以定义一个static int 形的常量count 然后将count++放入这个类的构造函数中,这样只要输出count的 ...

  2. c++ 查重+排序函数

    输入 第一行n.第二行有n个元素. 输出 查重排序后的元素 样例: 输入: 5 1 1 2 3 4 输出: 1 2 3 4 unique的作用是“去掉”容器中相邻元素的重复元素 注意:用unique只 ...

  3. BigOps自动化运维安装以及所遇故障处理

    本文参考官方文档进行安装,以及在安装中所遇到的问题呈现给大家.废话就不说了,开始安装.一.准备工作:本机系统环境是CentOS 7 x86 64位硬件配置建议物理内存8G+.CPU 4 cores+. ...

  4. 在javaweb中对于session的使用

    1.初次调用session时: String username="student"; HttpSession session=request.getSession(true);// ...

  5. 如何搭建OWASP测试靶机

    刚刚入门的新手都需要一个可以用来练习的环境,但是dvwa的搭建需要相关环境,所以这里推荐大家在虚拟机上搭建owasp靶机,里面集成了dvwa靶机. https://sourceforge.net/pr ...

  6. 吴裕雄--天生自然 JAVA开发学习:解决java.sql.SQLException: The server time zone value报错

    这个异常是时区的错误,因此只你需要设置为你当前系统时区即可,解决方案如下: import java.sql.Connection ; import java.sql.DriverManager ; i ...

  7. Python实现简单中文词频统计示例

    简单统计一个小说中哪些个汉字出现的频率最高: import codecs import matplotlib.pyplot as plt from pylab import mpl mpl.rcPar ...

  8. AD7705/TM7705使用注意事项

    http://bbs.eeworld.com.cn/thread-66467-1-1.html 1 空闲是SCLK=1(C POA),DIN=1(因为写寄存器都是从写通讯寄存器开始,此时第8位必须为0 ...

  9. ubunut18.04 下安装 gitlab ce版,使用清华源

    gitlab官方的ubuntu安装说明 https://about.gitlab.com/install/#ubuntu 该安装说明介绍的是gitlab-ee版本 按照该说明也能安装gitlab-ce ...

  10. uniGUI之新窗口uniForm(19)

    然后 保存,在这里 重命名窗口 //主窗口 调用 // NewForm2.UniForm1.Show() ; //非阻塞 NewForm2.UniForm1.ShowModal();//阻塞 //子窗 ...