Listener是在servlet2.3中加入的,主要用于对Session,request,context等进行监控。

使用Listener需要实现响应的接口。触发Listener事件的时候,tomcat会自动调用Listener的方法。

在web.xml中配置标签,一般要配置在标签前面,可配置多个,同一种类型也可配置多个

com.xxx.xxx.ImplementListener

servlet2.5的规范中共有8中Listener,分别监听session,context,request等的创建和销毁,属性变化等。

常用的监听接口:

监听对象

HttpSessionListener :监听HttpSession的操作,监听session的创建和销毁。 可用于收集在线着信息

ServletRequestListener:监听request的创建和销毁。

ServletContextListener:监听context的创建和销毁。 启动时获取web.xml里配置的初始化参数

监听对象的属性

HttpSessionAttributeListener :

ServletContextAttributeListener :

ServletRequestAttributeListener :

监听session内的对象

HttpSessionBindingListener:对象被放到session里执行valueBound(),对象移除时执行valueUnbound()。对象必须实现该lisener接口。

HttpSessionActivationListener:服务器关闭时,会将session里的内容保存到硬盘上,这个过程叫做钝化。服务器重启时,会将session内容从硬盘上重新加载。下面为大家分享一个Listener的应用实例:

利用HttpSessionListener统计最多在线用户人数

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

public class HttpSessionListenerImpl implements HttpSessionListener {

public void sessionCreated(HttpSessionEvent event) {

ServletContext app = event.getSession().getServletContext();

int count = Integer.parseInt(app.getAttribute("onLineCount").toString());

count++;

app.setAttribute("onLineCount", count);

int maxOnLineCount = Integer.parseInt(app.getAttribute("maxOnLineCount").toString());

if (count > maxOnLineCount) {

//记录最多人数是多少 app.setAttribute("maxOnLineCount", count);

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

//记录在那个时刻达到上限 app.setAttribute("date", df.format(new Date()));

}

}

//session注销、超时时候调用,停止tomcat不会调用 public void sessionDestroyed(HttpSessionEvent event) {

ServletContext app = event.getSession().getServletContext();

int count = Integer.parseInt(app.getAttribute("onLineCount").toString());

count--;

app.setAttribute("onLineCount", count);

}

}

servlet对java的重要性_浅谈Servlet技术中的Listener起到的作用相关推荐

  1. java扫码枪键盘_浅谈在react中如何实现扫码枪输入

    触发原理 原理就是监听键盘输入,比如扫一个为6970596130126的69条形码,用扫码枪扫一下会在光标位置依次输出: 6 9 7 0 5 9 6 1 3 0 2 6 但这不是完整的,所以需要写一个 ...

  2. java 定时任务怎么关闭_浅谈springboot项目中定时任务如何优雅退出

    在一个springboot项目中需要跑定时任务处理批数据时,突然有个Kill命令或者一个Ctrl+C的命令,此时我们需要当批数据处理完毕后才允许定时任务关闭,也就是当定时任务结束时才允许Kill命令生 ...

  3. mysql declare与set的区别_浅谈MySQL存储过程中declare和set定义变量的区别

    在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...

  4. mysql存储过程set什么意思_浅谈MySQL存储过程中declare和set定义变量的区别

    在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...

  5. python中if和elif的区别_浅谈对python中if、elif、else的误解

    今天下午在练习python时用了"if...if...else..."的分支结构,结果运行出来吓我一跳.原来我想当然的认为"if...if...else..." ...

  6. python中分支语句elif与else的区别_浅谈对python中if、elif、else的误解

    今天下午在练习python时用了"if...if...else..."的分支结构,结果运行出来吓我一跳.原来我想当然的认为"if...if...else..." ...

  7. java对象头_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

  8. java bitset用途_浅谈Java BitSet使用场景和代码示例

    搜索热词 @H_502_0@一.什么是BitSet? @H_502_0@ 注:以下内容来自JDK API: @H_502_0@ BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个b ...

  9. java 多线程同步_浅谈Java多线程(状态、同步等)

    Java多线程是Java程序员必须掌握的基本的知识点,这块知识点比较复杂,知识点也比较多,今天我们一一来聊下Java多线程,系统的整理下这部分内容. 一.Java中线程创建的三种方式: 1.通过继承T ...

最新文章

  1. SQL优化常用方法49
  2. iwconfig 安装_iwconfig linux 命令行配置无线网卡
  3. 提取HTML代码中文字的C#函数
  4. 1057 Stack (30 分)【难度: 中 / 知识点: 树状数组 STL】
  5. python课程思路_学习python课程第二十六天
  6. html兼容webki,评IE10对HTML5的完美支持
  7. android访问重定向地址,如何从android中重定向url加载图像(示例代码)
  8. 浏览器与JavaScript(一)
  9. 与Zell关闭星期五
  10. 湖北工业大学计算机学院王泽建,“指尖年轮,感恩成长”计算机学院2019届毕业生晚会圆满举行...
  11. Siri为什么越来越蠢?
  12. 种草笔记App放话:要让一万创作者月入过万
  13. 【Java笔记】【Java核心技术卷1】chapter3 D4变量
  14. 服务器电源维修哪里便宜,服务器电源维修
  15. 地推HTTP成长介绍
  16. PHP文件上传后缀名与文件类型对照表
  17. appium 原理解析(转载雷子老师博客)
  18. Python——Dict类型
  19. 《数学之美》吴军-读书笔记
  20. 年轻人的第一次汉化APK(教程)

热门文章

  1. IE6 Hotfix MS-042将导致其Crash!
  2. 705. 设计哈希集合
  3. ap sat_新手必读:7个问题分清SAT、AP、托福考试
  4. springboot租房管理系统答辩PPT模板
  5. java中static_认识java中的static
  6. 删除oracle 连接进程,如何查看和清除oracle无用的连接进程
  7. 步进电机速度不够怎么办?
  8. 微信小程序创建一个新项目
  9. webpack4+vue打包简单入门
  10. 几个查看进程及日志的命令