java-监听器(Listener)
博客已迁移到CSDN《https://blog.csdn.net/qq_33375499》
监听器:用于监听web应用中某些对象、信息的创建、销毁等动作,服务器会自动调用相应的方法进行处理。常用于统计在线人数,初始化系统参数等。
Javaweb监听器主要监听对象有ServletContext、HttpSession、ServletRequest。
下面是贴上一个统计登录人信息的栗子:
在web.xml 中配置监听器:
<!--用户登录监听器-->
<listener>
<listener-class>com.xxx.listener.SessionListener</listener-class>
</listener>
创建监听器:
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import java.util.*; public class SessionListener implements HttpSessionListener,ServletRequestListener {
// 定义监听类对象,用于存储所有用户的登录信息
private static Map<String,String> userList = new HashMap<String, String>();
// 定义session map对象
private static Map<String,HttpSession> sessionMap = new HashMap<String, HttpSession>(); private HttpServletRequest request = null; @Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {// 监听 session 创建 } @Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {// 监听 session 销毁
HttpSession httpSession = httpSessionEvent.getSession();
// 获取登录用户名
String username = (String) httpSession.getAttribute("username");
if(username != null){
Iterator iterator = userList.entrySet().iterator();
Map map = null;
String logmsg = null;
// 遍历 userList:将userlist中的用户信息删除
while (iterator.hasNext()){
map = (Map) iterator.next();
if(map.get(username) != null){
logmsg = (String) map.get(username);
if(logmsg.indexOf(request.getLocalAddr()) > -1){
userList.remove(username);
sessionMap.remove(username);
break;
}
}
}
}
} @Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {// 监听 request 销毁 } @Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {// 监听 request 创建
this.request = (HttpServletRequest) servletRequestEvent.getServletRequest();
HttpSession httpSession = this.request.getSession();
// 获取登录用户名
String username = (String) httpSession.getAttribute("username");
if(username != null){
// 如果 userList为空直接 put
if(userList.isEmpty()){
userList.put(username,"IP: " + request.getLocalAddr() + " ,logtime:" + ProUtil.getStrDatetime(new Date()));
sessionMap.put(username,httpSession);
return;
}
String logmsg = null;
if(userList.get(username) == null){
userList.put(username,"IP: " + request.getLocalAddr() + " ,logtime:" + ProUtil.getStrDatetime(new Date()));
sessionMap.put(username,httpSession);
}else {
logmsg = userList.get(username);
if(logmsg.indexOf(request.getLocalAddr()) > -1){
userList.put(username,"IP: " + request.getLocalAddr() + " ,logtime:" + ProUtil.getStrDatetime(new Date()));
sessionMap.put(username,httpSession);
}else {
userList.put(username,"IP: " + request.getLocalAddr() + " ,logtime:" + ProUtil.getStrDatetime(new Date()));
sessionMap.get(username).setAttribute("logError","该账号已经在其他地方登录!!!");
sessionMap.put(username,httpSession);
}
}
}
}
}
java-监听器(Listener)的更多相关文章
- JAVA监听器Listener
JAVA监听器Listener 一. 简介 监听器用于对web中内置对象的状态或者属性变化进行监听并做出相应响应的一种Servlet;在内置对象的生命周期中,产生.销毁等状态发生变化时,监听器就会进行 ...
- Java监听器listener的介绍
Java监听器listener的介绍 listener 能做什么 当web中某些动作发生之后,服务器就调用listener中对应的方法. 内部机制 接口回调 Web监听器 步骤 创建需要的监听器类,实 ...
- Java监听器Listener使用说明
转载:http://blog.csdn.net/meng2602956882/article/details/13511587 1.什么是Java监听器 监听器也叫Listener,是Servlet的 ...
- Java监听器Listener使用详解
监听器用于监听web应用中某些对象.信息的创建.销毁.增加,修改,删除等动作的发生,然后作出相应的响应处理.当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法.常用于统计在线人数和在线用 ...
- Java监听器Listener的使用详解
监听器用于监听Web应用中某些对象的创建.销毁.增加,修改,删除等动作的发生,然后作出相应的响应处理.当监听范围的对象的状态发生变化的时候,服务器自动调用监听器对象中的方法.常用于统计网站在线人数.系 ...
- java之Servlet监听器Listener
常用应用场景:单点登录.统计在线人数 一.简介 (一)概述 1.Listener 用于监听 java web程序中的事件,例如创建.修改.删除Session.request.context等,并触发响 ...
- java监听器(Listener)学习笔记
现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次, ...
- 【java web】监听器listener
一.简介 Java的监听器,也是系统级别的监听.监听器随web应用的启动而启动.Java的监听器在c/s模式里面经常用到,它会对特定的事件产生产生一个处理.监听在很多模式下用到,比如说观察者模式,就是 ...
- JAVA监听器原理
http://blog.csdn.net/longyulu/article/details/25054697 JAVA监听器原理 标签: 监听器 2014-05-05 15:40 9070人阅读 评论 ...
- javaweb学习总结(四十七)——监听器(Listener)在开发中的应用
监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听 ...
随机推荐
- shell 获取指定ip的丢包率
shell 获取指定ip的丢包率 丢包率大于10%就重新网络 使用sed 替换字符串 [[ $(ping -c 10 -W 1 baidu.com | awk '$6 ~ /%/{print $6}' ...
- codeforces#101194H. Great Cells(数学)
题目链接: https://codeforces.com/gym/101194 题意: 在$n×m$的各自中填上$1$到$k$的数 定义Greate cell为严格大于同行和同列的格子 定义$A_g$ ...
- vmware压缩vmdk文件大小
在搭建靶机环境的过程中总是遇见vmdk越来越大,导致上传时间变长.记一下压缩vmdk的方法 ;sync;rm -f zero.fill /usr/bin/vmware-toolbox-cmd disk ...
- 重读APUE(14)-主线程终止对子线程的影响
在main中创建线程,我们称main线程为主线程,新建线程为子线程(其实没有什么主线程和子线程的父子概念,它们是平行的,为了好理解这样称呼),如果子线程内部执行相对比较耗时的操作,主线程执行的快,而且 ...
- ArcGIS超级工具SPTOOLS-按属性裁剪,矢量数据批量裁剪,矢量数据批量合库
1.1 按属性裁剪 操作视频: https://weibo.com/tv/v/HwaZRoosq?fid=1034:4376687438183117 按属性裁剪:可以图形表,也可以是非图形表,字段值 ...
- Rect和RectF函数
1.是否包含点,矩形 判断是否包含某个点 boolean contains(int x,int y) 函数用于判断某个点是否在当前矩形中,如果在,则返回true ,不在则false 2.判断是否包含 ...
- tortoiseGit did not exit cleanly (exit code 128)
安装并配置好tortoiseGit之后,clone项目时,报错: git did not exit cleanly (exit code 128)如下图: 该问题解决方式: 1.确保Pageant启动 ...
- Java 实现 telnet命令 验证主机端口的连通性
Java 实现 telnet命令 验证主机端口的连通性 1.Telnet 命令 Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式.它为用户提供了在本地计 ...
- MR21修改标准价
转自:https://blog.csdn.net/qq_21813647/article/details/79195731 物料帐下只有物料的状态是初始状态才允许修改价格. 如果状态为已输入数量和值也 ...
- JAVA 基础编程练习题43 【程序 43 求奇数个数】
43 [程序 43 求奇数个数] 题目:求 0—7 所能组成的奇数个数. package cskaoyan; public class cskaoyan43 { @org.junit.Test pub ...