Java如何使用Listener
定义
用于监听Web应用的内部事件的实现类。可以监听用户session的开始与结束,用户请求的到达等等,当事件发生时,会回调监听器的内部方法
使用Listener步骤
- 通过实现具体接口创建实现类(可实现多个监听器接口)
- 配置实现类成为监听器,有两种配置方式:
- 直接用@WebListener注解修饰实现类
- 通过web.xml方式配置,代码如下:
<listener><listener-class>com.zrgk.listener.MyListener</lisener-class>
</listener>
常用Web事件监听器接口
1. ServletContextListener
- 该接口用于监听Web应用的启动与关闭
- 该接口的两个方法:
- contextInitialized(ServletContextEvent event); // 启动web应用时调用
- contextDestroyed(ServletContextEvent event); // 关闭web应用时调用
- 如何获得application对象:
ServletContext application = event.getServletContext(); - 示例
@WebListener
public class MyServetContextListener implements ServletContextListener{//web应用关闭时调用该方法@Overridepublic void contextDestroyed(ServletContextEvent event) {ServletContext application = event.getServletContext();String userName = application.getInitParameter("userName"); System.out.println("关闭web应用的用户名字为:"+userName);}//web应用启动时调用该方法@Overridepublic void contextInitialized(ServletContextEvent event) {ServletContext application = event.getServletContext();String userName = application.getInitParameter("userName"); System.out.println("启动web应用的用户名字为:"+userName);}}
2. ServletContextAttributeListener
- 该接口 用于监听ServletContext范围(application)内属性的改变。
- 该接口的两个方法:
- attributeAdded(ServletContextAttributeEvent event); // 当把一个属性存进application时触发
- attributeRemoved(ServletContextAttributeEvent event); // 当把一个属性从application删除时触发
- attributeReplaced(ServletContextAttributeEvent event); // 当替换application内的某个属性值时触发
- 如何获得application对象:
ServletContext application = event.getServletContext(); - 示例
@WebListener
public class MyServletContextAttributeListener implements ServletContextAttributeListener{//向application范围内添加一个属性时触发@Overridepublic void attributeAdded(ServletContextAttributeEvent event) {String name = event.getName();//向application范围添加的属性名Object val = event.getValue(); //向application添加的属性对应的属性值System.out.println("向application范围内添加了属性名为:"+name+",属性值为:"+val+"的属性");}//删除属性时触发@Overridepublic void attributeRemoved(ServletContextAttributeEvent event) {// ... }//替换属性值时触发@Overridepublic void attributeReplaced(ServletContextAttributeEvent event) {// ... }}
3. ServletRequestListener与ServletRequestAttributeListener
- ServletRequestListener用于监听用户请求,而ServletRequestAttributeListener用于监听request范围内属性的变化。
- ServletRequestListener两个需要实现的方法
- requestInitialized(ServletRequestEvent event); //用户请求到达、被初始化时触发
- requestDestroyed(ServletRequestEvent event); // 用户请求结束、被销毁时触发
- ServletRequestAttributeListener两个需要实现的方法
- attributeAdded(ServletRequestAttributeEvent event); // 向request范围内添加属性时触发
- attributeRemoved(ServletRequestAttributeEvent event); // 从request范围内删除某个属性时触发
- attributeReplaced(ServletRequestAttributeEvent event); // 替换request范围内某个属性值时触发
- 获取reqeust对象
HttpServletRequest req = (HttpServletRequest)event.getServletRequest(); - 代码片
@WebListener
public class MyRequestListener implements ServletRequestListener,ServletRequestAttributeListener{//用户请求结束、被销毁时触发@Overridepublic void requestDestroyed(ServletRequestEvent event) {HttpServletRequest req = (HttpServletRequest) event.getServletRequest();String ip = req.getRemoteAddr();System.out.println("IP为:"+ip+"的用户发送到"+req.getRequestURI()+"的请求结束");}//用户请求到达、被初始化时触发@Overridepublic void requestInitialized(ServletRequestEvent event) {HttpServletRequest req = (HttpServletRequest) event.getServletRequest();String ip = req.getRemoteAddr();System.out.println("IP为:"+ip+"的用户发送到"+req.getRequestURI()+"的请求被初始化");}//向request范围内添加属性时触发@Overridepublic void attributeAdded(ServletRequestAttributeEvent event) {String name = event.getName();Object val = event.getValue();System.out.println("向request范围内添加了名为:"+name+",值为:"+val+"的属性");}//删除request范围内某个属性时触发@Overridepublic void attributeRemoved(ServletRequestAttributeEvent event) {//... }//替换request范围内某个属性值时触发@Overridepublic void attributeReplaced(ServletRequestAttributeEvent event) {// ... }
}
4. HttpSessionListener与HttpSessionAttributeListener
- HttpSessionListener监听用户session的开始与结束,而HttpSessionAttributeListener监听HttpSession范围(session)内的属性的改变。
- HttpSessionListener要实现的方法:
- sessionCreated(HttpSessionEvent event); // 用户与服务器的会话开始、创建时触发
- sessionDestroyed(HttpSessionEvent event); // 用户与服务器的会话结束时触发
- HttpSessionAttributeListener要实现的方法:
- attributeAdded(HttpSessionBindingEvent event) ; // 向session范围内添加属性时触发
- attributeRemoved(HttpSessionBindingEvent event); // 删除session范围内某个属性时触发
- attributeReplaced(HttpSessionBindingEvent event); // 替换session范围内某个属性值时触发
- 如何得到session对象
HttpSession session = event.getSession(); - 代码片
@WebListener
public class MySessionListener implements HttpSessionListener,HttpSessionAttributeListener {//建立session会话时触发@Overridepublic void sessionCreated(HttpSessionEvent event) {HttpSession session = event.getSession();String sessionId = session.getId();System.out.println("建立了会话,会话ID为:"+sessionId);}@Overridepublic void sessionDestroyed(HttpSessionEvent event) {// ... }//向session范围内添加属性时触发@Overridepublic void attributeAdded(HttpSessionBindingEvent event) {String name = event.getName();Object val = event.getValue();System.out.println("向session范围内添加了名为:"+name+",值为:"+val+"的属性");}@Overridepublic void attributeRemoved(HttpSessionBindingEvent event) {// ... }@Overridepublic void attributeReplaced(HttpSessionBindingEvent event) {// ... }}
Java如何使用Listener相关推荐
- java监听器(Listener)统计在线人数
使用java监听器统计在线人数 1. 监听器的简介 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法 ...
- Java中的Listener监听器与Ajax技术和Axios异步框架以及JSON传递接收数据
Listener监听器与Ajax Listener 概念 Listener 表示监听器,是 JavaWeb 三大组件(Servlet.Filter.Listener)之一. 监听器可以监听就是在 ap ...
- java 自带thread分析工具_java自带的jvm分析工具
这段时间觉得很有必要对java的内存分析工具进行熟悉,这样以后出现机器负载较高,或者反应很慢的时候,我就可以查找原因了.上网搜了搜,发现下面这些是比较常用的,然后我在机器上试试了,把结果也贴出来哈. ...
- Java并发编程73道面试题及答案——稳了
点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户 ...
- 记一次Java多线程程序调试经历:HttpClient 死锁
我自己写了一个爬虫程序,跑了半天后程序就卡死了,没有任何输出和动静. 先是使用jstatd和VisualVM,参考这篇文章:jstatd,VisualVM使用和报错解决 结果如下图: 看到内存毫无变化 ...
- Oracle数据库ORA-12516:“listener could not find available handler with matching protocol stack!“问题解决方法
Oracle 数据库 sql 连接报错: java.sql.SQLException: Listener refused the connection with the following error ...
- Java并发编程75道面试题及答案
1.在java中守护线程和本地线程区别?java中的线程分为两种:守护线程(Daemon)和用户线程(User).任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bo ...
- ant编译java工程总结
首先可以参考这两篇文章: dos下编译运行java工程: http://blog.csdn.net/lyhdream/article/details/17200445 dos下打包整个java工程: ...
- dos下打包整个java工程
此篇文章首先参考: http://blog.csdn.net/lyhdream/article/details/17200445 我的java工程根目录为类容如下: 接下来我们删除掉.settings ...
最新文章
- 程序员的自我修养--链接、装载与库笔记:目标文件里有什么
- 在cmd的方式下,简化mysql的输入的方法
- 【c语言】蓝桥杯基础练习 数列特征
- Ubuntu 14.04下 Redis MongoDB安装及使用
- CCNP-16 OSPF试验12(BSCI)
- ConfigParser模块简明教程
- jvm的架构模型:基于栈式的架构和基于寄存器架构的特点
- 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译
- ad20中怎么多选操作改层_在操作系统中CPU是怎么调度的
- Visual studio Code的C/C++开发环境搭建
- php 获取数据库函数吗,如何正确理解PHP获取显示数据库数据函数
- 拓端tecdat|采用SPSS Modeler的Web复杂网络对所有腧穴进行关联规则分析
- 创建数据库常用SQL语句
- python负数字符串转成_python 转字符
- IT资产管理流程及规范
- Nebula Graph - 基于Docker 安装 及 Studio
- linux u盘格式化失败怎么办,u盘无法完成格式化怎么办
- 【机器学习基础】泛化能力、过拟合、欠拟合、不收敛、奥卡姆剃刀原则
- 读 Charles Petzold 之《编码:隐匿在计算机软硬件背后的语言》
- 牛客寒假集训营 牛牛战队的比赛地
热门文章
- 【Flask】flask入门以及第一个flask项目的创建
- SocketAPI,CAsyncSocket,CSocket内幕及其用法
- 【筛素数】P1579 哥德巴赫猜想(升级版)
- [NPUCTF2020]Baby Obfuscation [HDCTF2019]MFC
- 某office前台任意文件上传漏洞分析
- 【Docker】记一次docker container ping domain 和 ping ipv6地址不通问题
- ACM入门之【线段树】
- 1074 Reversing Linked List (25 分)【难度: 一般 / 知识点: 链表】
- 【PAT乙级】1073 多选题常见计分法 (20 分)
- Spring boot配置Servlet容器