servlet对java的重要性_浅谈Servlet技术中的Listener起到的作用
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起到的作用相关推荐
- java扫码枪键盘_浅谈在react中如何实现扫码枪输入
触发原理 原理就是监听键盘输入,比如扫一个为6970596130126的69条形码,用扫码枪扫一下会在光标位置依次输出: 6 9 7 0 5 9 6 1 3 0 2 6 但这不是完整的,所以需要写一个 ...
- java 定时任务怎么关闭_浅谈springboot项目中定时任务如何优雅退出
在一个springboot项目中需要跑定时任务处理批数据时,突然有个Kill命令或者一个Ctrl+C的命令,此时我们需要当批数据处理完毕后才允许定时任务关闭,也就是当定时任务结束时才允许Kill命令生 ...
- mysql declare与set的区别_浅谈MySQL存储过程中declare和set定义变量的区别
在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...
- mysql存储过程set什么意思_浅谈MySQL存储过程中declare和set定义变量的区别
在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...
- python中if和elif的区别_浅谈对python中if、elif、else的误解
今天下午在练习python时用了"if...if...else..."的分支结构,结果运行出来吓我一跳.原来我想当然的认为"if...if...else..." ...
- python中分支语句elif与else的区别_浅谈对python中if、elif、else的误解
今天下午在练习python时用了"if...if...else..."的分支结构,结果运行出来吓我一跳.原来我想当然的认为"if...if...else..." ...
- java对象头_浅谈java对象结构 对象头 Markword
概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...
- java bitset用途_浅谈Java BitSet使用场景和代码示例
搜索热词 @H_502_0@一.什么是BitSet? @H_502_0@ 注:以下内容来自JDK API: @H_502_0@ BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个b ...
- java 多线程同步_浅谈Java多线程(状态、同步等)
Java多线程是Java程序员必须掌握的基本的知识点,这块知识点比较复杂,知识点也比较多,今天我们一一来聊下Java多线程,系统的整理下这部分内容. 一.Java中线程创建的三种方式: 1.通过继承T ...
最新文章
- SQL优化常用方法49
- iwconfig 安装_iwconfig linux 命令行配置无线网卡
- 提取HTML代码中文字的C#函数
- 1057 Stack (30 分)【难度: 中 / 知识点: 树状数组 STL】
- python课程思路_学习python课程第二十六天
- html兼容webki,评IE10对HTML5的完美支持
- android访问重定向地址,如何从android中重定向url加载图像(示例代码)
- 浏览器与JavaScript(一)
- 与Zell关闭星期五
- 湖北工业大学计算机学院王泽建,“指尖年轮,感恩成长”计算机学院2019届毕业生晚会圆满举行...
- Siri为什么越来越蠢?
- 种草笔记App放话:要让一万创作者月入过万
- 【Java笔记】【Java核心技术卷1】chapter3 D4变量
- 服务器电源维修哪里便宜,服务器电源维修
- 地推HTTP成长介绍
- PHP文件上传后缀名与文件类型对照表
- appium 原理解析(转载雷子老师博客)
- Python——Dict类型
- 《数学之美》吴军-读书笔记
- 年轻人的第一次汉化APK(教程)