十九 Listener
Listener 监听器
一 监听器内部原理:其实就是接口回调
需求:A在执行循环,当循环到5的时候,通知B
事先先把某一个对象传递给A ,当A执行到5的时候,通过这个对象来调用B中的方法
但是不是直接传递B的实例,而是传递一个B所实现的接口过去。未来的类只要实现这个接口,都能被A调用。

二、 监听器的三个作用域的销毁和创建
web监听器:8个,划分成三种类型
*监听三个作用域的创建和销毁
*监听三个作用域属性状态变更
*监听httpSession里面存值状态变更
*步骤:
- 定义一个类,实现接口
- 注册|配置监听器
<listener>
<listener-class>com.listener.MyContextListener</listener-class>
</listener>
*监听三个作用域的创建和销毁
//pageContext(作用域当前页面)
- request ---HttpServletRequst
- session ----HttpSession
- application ---ServletContext
1. ServletContextListener
ServletContext创建:
- 启动tomcat服务器的时候
ServletContext销毁:
- 关闭服务器
- 从服务器移除项目
ServletContext作用:
- 在ServletCOntext创建的时候,完成自己想要的初始化工作
- 执行自定义任务调度,执行某一个任务
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的更多相关文章
- spring boot / cloud (十九) 并发消费消息,如何保证入库的数据是最新的?
spring boot / cloud (十九) 并发消费消息,如何保证入库的数据是最新的? 消息中间件在解决异步处理,模块间解耦和,和高流量场景的削峰,等情况下有着很广泛的应用 . 本文将跟大家一起 ...
- 无废话ExtJs 入门教程十九[API的使用]
无废话ExtJs 入门教程十九[API的使用] extjs技术交流,欢迎加群(201926085) 首先解释什么是 API 来自百度百科的官方解释:API(Application Programmin ...
- Python之路【第十九章】:Django进阶
Django路由规则 1.基于正则的URL 在templates目录下创建index.html.detail.html文件 <!DOCTYPE html> <html lang=&q ...
- Bootstrap <基础二十九>面板(Panels)
Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...
- Bootstrap <基础十九>分页
Bootstrap 支持的分页特性.分页(Pagination),是一种无序列表,Bootstrap 像处理其他界面元素一样处理分页. 分页(Pagination) 下表列出了 Bootstrap 提 ...
- Web 开发人员和设计师必读文章推荐【系列二十九】
<Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列十九】
<Web 前端开发精华文章推荐>2013年第七期(总第十九期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...
- Python之路【第十九篇】:爬虫
Python之路[第十九篇]:爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用 ...
- KALI LINUX WEB 渗透测试视频教程—第十九课-METASPLOIT基础
原文链接:Kali Linux Web渗透测试视频教程—第十九课-metasploit基础 文/玄魂 目录 Kali Linux Web 渗透测试视频教程—第十九课-metasploit基础..... ...
随机推荐
- 洛谷P2758编辑距离(线性DP)
题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1.删除一个字符: 2.插入一个字符: 3.将一个字符改为另一个字符: !皆为小写字 ...
- 基于Modelsim的视频捕获模拟仿真
一.前言 针对牟新刚编著的<基于FPGA的数字图像处理原理及应用>中第五章系统仿真中关于视频捕获模拟的例子进行补充和仿真验证,简言之,吊书袋子. 2020-02-27 21:09:05 二 ...
- Python语言——列表生成式
生成[1x1, 2x2, 3x3, ..., 10x10]列表: >>> L = [] >>> for x in range(1, 11):... >> ...
- 【SSM 验证码】登录验证码
LoginController /** * 登陆方法 */ @ResponseBody @RequestMapping("login2") public Map<String ...
- 中国社交电商最新展望,S-KOL-C正突围而出
编辑 | 韩星 出品 | 于见(mpyujian) 通信技术.移动互联网的快速发展正加速国内电商平台的深度变革. 在这场以"社交"和"下沉市场"为关键词的电商之 ...
- idea提示非法字符
问题: 解决方法: 将编码格式UTF-8+BOM文件转为普通的UTF-8文件. 一.简单方法,在AS右下角,将编码改为GBK,再转为UTF-8,可以解决. 二.可以用EditPlus 1.将文件用Ed ...
- springboot集成拦截器
一.首先对HandlerInterceptor进行封装,封装为MappingInterceptor.封装的方法里添加拦截器起作用的路径addPathPatterns(),及需要排除路径的方法exclu ...
- tensorflow文本分类实战——卷积神经网络CNN
首先说明使用的工具和环境:python3.6.8 tensorflow1.14.0 centos7.0(最好用Ubuntu) 关于环境的搭建只做简单说明,我这边是使用pip搭建了python的 ...
- 51nod 1449:砝码称重
1449 砝码称重 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 取消关注 现在有好多种砝码,他们的重量是 w0,w1 ...
- C++11类内static成员变量声明与定义
众所周知,将一个类内的某个成员变量声明为static型,可以使得该类实例化得到的对象实现对象间数据共享. 在C++中,通常将一个类的声明写在头文件中,将这个类的具体定义(实现)写在cpp源文件中. 因 ...