Java Listener
六、 Java Listener
1. Java Listener 简介
* Java Listener 1. Java Listener(即:Java 监听器):用于监听 ServletRequest、HttpSession、ServletContext 作用域对象的创建、销毁、及其属性修改变化 2. 在 Web 项目中可以有多个 Java 监听器 3. 应用场景: a.统计在线人数 b.统计页面访问量 c.服务器加载时数据初始化
* Listener 的使用 1. 在 web.xml 中配置监听器: <listener> <listener-class>com.ncdx.listener.MyListener</listener-class> </listener>
2. 创建 Java 类,根据需求实现相应的接口: 1)ServletRequestListener 接口 //声明了 ServletRequest 作用域对象的创建、销毁的监听方法 2)ServletRequestAttributeListener 接口 //声明了 ServletRequest 作用域对象中属性的添加、修改、删除的监听方法
3)HttpSessionListener 接口 //声明了 HttpSession 作用域对象的创建、销毁的监听方法 4)HttpSessionAttributeListener 接口 //声明了 HttpSession 作用域对象中属性的添加、修改、删除的监听方法
5)ServletContextListener 接口 //声明了 ServletContext 作用域对象的创建、销毁的监听方法 6)ServletContextAttributeListener 接口 //声明了 ServletContext 作用域对象中属性的添加、修改、删除的监听方法
3. 重写相应的监听方法
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MyListener implements ServletRequestListener,ServletRequestAttributeListener,
HttpSessionListener,HttpSessionAttributeListener,
ServletContextListener,ServletContextAttributeListener{
@Override//监听request对象销毁
public void requestDestroyed(ServletRequestEvent sre) {
}
@Override//监听request对象创建
public void requestInitialized(ServletRequestEvent sre) {
}
@Override//监听request作用域数据的添加
public void attributeAdded(ServletRequestAttributeEvent srae) {
}
@Override//监听request作用域数据的删除
public void attributeRemoved(ServletRequestAttributeEvent srae) {
}
@Override//监听request作用域数据的修改
public void attributeReplaced(ServletRequestAttributeEvent srae) {
}
/*.....................................................................*/
@Override//监听session对象的创建
public void sessionCreated(HttpSessionEvent se) {
}
@Override//监听session对象的销毁
public void sessionDestroyed(HttpSessionEvent se) {
}
@Override//监听session作用域数据的添加
public void attributeAdded(HttpSessionBindingEvent se) {
}
@Override//监听session作用域数据的删除
public void attributeRemoved(HttpSessionBindingEvent se) {
}
@Override//监听session作用域数据的更改
public void attributeReplaced(HttpSessionBindingEvent se) {
}
/*.........................................................................*/
@Override//监听application对象销毁
public void contextDestroyed(ServletContextEvent sce) {
}
@Override//监听application对象创建
public void contextInitialized(ServletContextEvent sce) {
}
@Override//监听application作用域数据的添加
public void attributeAdded(ServletContextAttributeEvent scae) {
}
@Override//监听application作用域数据的删除
public void attributeRemoved(ServletContextAttributeEvent scae) {
}
@Override//监听application作用域数据的更改
public void attributeReplaced(ServletContextAttributeEvent scae) {
}
}
Listener
2. Java 监听器的实例
/**
* 模拟统计在线人数
*/
public class MyListener implements ServletRequestListener,ServletRequestAttributeListener,
HttpSessionListener,HttpSessionAttributeListener,
ServletContextListener,ServletContextAttributeListener{
@Override
public void contextInitialized(ServletContextEvent sce) {//在ServletContext对象中存储变量用来统计在线人数
//获取ServletContext
ServletContext sc = sce.getServletContext();
//在ServletContext对象中存储变量并初始化
sc.setAttribute("count", 0);
}
@Override
public void sessionCreated(HttpSessionEvent se) {//session被创建时人数自增
//获取SerevletContext对象
ServletContext sc = se.getSession().getServletContext();
//获取在线人数的变量
int count = (int)sc.getAttribute("count");
//存储
sc.setAttribute("count", ++count);
//显示在线人数
System.out.println("目前在线人数:" + se.getSession().getServletContext().getAttribute("count"));
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {//session被销毁时人数自减
//获取SerevletContext对象
ServletContext sc = se.getSession().getServletContext();
//获取在线统计人数的变量
int count = (int)sc.getAttribute("count");
//存储
sc.setAttribute("count", --count);
//显示在线人数
System.out.println("目前在线人数:" + se.getSession().getServletContext().getAttribute("count"));
}
}
Java Listener的更多相关文章
- Java Listener pattern 监听者模式
Java Listener pattern 监听者模式 2016-5-12 监听者模式(观察者模式)能降低对象之间耦合程度.为两个相互依赖调用的类进行解耦. 便于进行模块化开发工作.不同模块的开发者可 ...
- java listener实现定时任务
使用java ServletContextListener 实现各种简单定时任务. 1. 创建ServletContextListener,在3.0版本的web.xml中不再需要添加listener的 ...
- Java ---Listener监听器
在我们的web容器中,一直不断的触发着各种事件,例如:web应用启动和关闭,request请求到达和结束等.但是这些事件通常对于开发者来说是透明的,我们可以根据这些接口开发符合我们自身需求的功能.在w ...
- Java Listener中Spring接口注入的使用
在项目中使用Spring通常使用他的依赖注入可以很好的处理,接口与实现类之间的耦合性,但是通常的应用场景中都是Service层和DAO层,或者web层的话, 也是与Strust2来整合,那么如何在Li ...
- JavaWeb Listener
1. 监听器概述 1.1. 什么是监听器 做过Swing或者AWT图像界面Java程序开发的话,应该对Listener与Event非常熟悉.Swing或者AWT中通过Listener与Event来处理 ...
- Android5.1图库Gallery2代码分析数据加载流程
图片数据加载流程. Gallery---->GalleryActivity------>AlbumSetPage------->AlbumPage--------->Photo ...
- 使用Mongodb+Shiro+SpringMVC实现动态权限分配
此次的文档只对Mongodb整合Shiro并且实现动态权限分配做整理,其它的内容以后会补上. 第一步.创建在web.xml中配置 Spring .Shiro shiroFilter 过滤器是用来将请求 ...
- Spring boot 实现高吞吐量异步处理(适用于高并发场景)
技术要点 org.springframework.web.context.request.async.DeferredResult<T> 示例如下: 1. 新建Maven项目 asy ...
- Spring boot 集成Kafka
搭建Kafka集群,参考: https://www.cnblogs.com/jonban/p/kafka.html 源码示例如下: 1.新建 Maven 项目 kafka 2.pom.xml < ...
随机推荐
- 如何解决滚动条scrollbar出现造成的页面宽度被挤压的问题
参考如下: https://www.ucloud.cn/yun/114228.html
- Ubuntu下Iptables的简单运用,开放/关闭端口,禁止/允许IP或IP段访问...
首先添加规则有两个参数:-A和-I,其中-A是添加到规则的末尾:-I可以插入到指定位置,没有指定位置的话默认插入到规则的首部,由于匹配规则是从上往下,依次查找的,可能出现配置的规则冲突导致后续的规则不 ...
- 数据库基础知识介绍(MySQL)
一.什么是数据库 1.数据库概念:数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API接口用于创建,访问,管理,搜索和复制所保存的数据. 2.RD ...
- 【VS开发】千兆以太网的传输速度
千兆以太网主流标准 千兆以太网络技术早在上世纪90年代末就已成熟,其中,1995年国际标准化组织TIA/EIA颁布了1000Base-TX标准,该标准的目的是把双绞线用于千兆以太网中,其目的是在6类非 ...
- linux用户管理添加用户的默认配置文件useradd详解
/etc/default/useradd 文件 cat /etc/default/useradd 常用命令: useradd 添加用户 userdel 删除用户 passwd 改密码 use ...
- luogu P3031 [USACO11NOV]高于中位数Above the Median (树状数组优化dp)
链接:https://www.luogu.org/problemnew/show/P3031 题面: 题目描述 Farmer John has lined up his N (1 <= N &l ...
- nginx+uwsgi02---django部署(推荐)
参考 https://blog.csdn.net/weixin_39198406/article/details/79277580 https://www.cnblogs.com/alex3714/ ...
- C++ STL Vector学习 (待续)
头文件:<vector> 初始化 vector<Elementtype> vec(); /*Elementtype是数据类型,10代表长单为10*/ vector<Ele ...
- Python【列表 字典 元组】
列表列表用中括号[ ]把各种数据框起来,每一个数据叫作“元素”.每个元素之间都要用英文逗号隔开各种类型的数据(整数/浮点数/字符串)————————————————————————————从列表提取单 ...
- 关于python中的包,模块导入的问题详解(一)
最近由于初学python,对包,模块的导入问题进行了资料的搜集,查阅,在这里做一个总结: 一: import 模块 在import的过程中发生了什么?我们用一个实验来说明: 以上截图表明:在impor ...