博客已迁移到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)的更多相关文章

  1. JAVA监听器Listener

    JAVA监听器Listener 一. 简介 监听器用于对web中内置对象的状态或者属性变化进行监听并做出相应响应的一种Servlet;在内置对象的生命周期中,产生.销毁等状态发生变化时,监听器就会进行 ...

  2. Java监听器listener的介绍

    Java监听器listener的介绍 listener 能做什么 当web中某些动作发生之后,服务器就调用listener中对应的方法. 内部机制 接口回调 Web监听器 步骤 创建需要的监听器类,实 ...

  3. Java监听器Listener使用说明

    转载:http://blog.csdn.net/meng2602956882/article/details/13511587 1.什么是Java监听器 监听器也叫Listener,是Servlet的 ...

  4. Java监听器Listener使用详解

    监听器用于监听web应用中某些对象.信息的创建.销毁.增加,修改,删除等动作的发生,然后作出相应的响应处理.当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法.常用于统计在线人数和在线用 ...

  5. Java监听器Listener的使用详解

    监听器用于监听Web应用中某些对象的创建.销毁.增加,修改,删除等动作的发生,然后作出相应的响应处理.当监听范围的对象的状态发生变化的时候,服务器自动调用监听器对象中的方法.常用于统计网站在线人数.系 ...

  6. java之Servlet监听器Listener

    常用应用场景:单点登录.统计在线人数 一.简介 (一)概述 1.Listener 用于监听 java web程序中的事件,例如创建.修改.删除Session.request.context等,并触发响 ...

  7. java监听器(Listener)学习笔记

    现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次, ...

  8. 【java web】监听器listener

    一.简介 Java的监听器,也是系统级别的监听.监听器随web应用的启动而启动.Java的监听器在c/s模式里面经常用到,它会对特定的事件产生产生一个处理.监听在很多模式下用到,比如说观察者模式,就是 ...

  9. JAVA监听器原理

    http://blog.csdn.net/longyulu/article/details/25054697 JAVA监听器原理 标签: 监听器 2014-05-05 15:40 9070人阅读 评论 ...

  10. javaweb学习总结(四十七)——监听器(Listener)在开发中的应用

    监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听 ...

随机推荐

  1. vii

    #!/bin/bash ] then vi exit fi ] then echo "参数太多了!" exit fi ] # 文件已存在,一律直接打开不作任何处理 then exi ...

  2. Bzoj 3036: 绿豆蛙的归宿(期望)

    3036: 绿豆蛙的归宿 Time Limit: 2 Sec Memory Limit: 128 MB Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归 ...

  3. wait系列

    转自 http://blog.csdn.net/todd911/article/details/15028511 1.wait函数和waitpid函数 当一个进程正常或异常终止时,内核就向其父进程发送 ...

  4. 使用appium+python做UI自动化的demo

    使用appium+python做UI自动化的demo 案例使用的知乎app,下载最新的知乎apk,存在了电脑上,只需要配置本机上app目录,不需要再配置appPackage和appActivity # ...

  5. webpack - 优化阻塞渲染的css

    随着浏览器的日新月异,网页的性能和速度越来越好,并且对于用户体验来说也越来越重要. 现在有很多优化页面的办法,比如:静态资源的合并和压缩,code splitting,DNS预读取等等. 本文介绍的是 ...

  6. UVALive 4394 String painter ——(区间DP)

    其实这个dp过程有点似懂非懂...代码如下: #include <stdio.h> #include <algorithm> #include <string.h> ...

  7. 消灭WinRAR广告

    1. 问题描述 WinRAR每次弹出的广告真的令人厌烦至极,虽然软件公司也得恰饭,免费给你用总得看俩广告吧,但是像我这样经常用WinRAR的人来说广告弹出频率未免也太过分了.一开始还只是用火绒的弹窗拦 ...

  8. pwn学习日记Day11 《程序员的自我修养》读书笔记

    阅读基础 计算机系统软件体系结构采用一种层的结构--计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决. 多线程的优势: 1.某个操作可能会陷入长时间等待,等待的线程会进入睡眠状态,无法继续 ...

  9. 第11组 Alpha冲刺(6/6)

    第11组 Alpha冲刺(6/6)   队名 不知道叫什么团队 组长博客 https://www.cnblogs.com/xxylac/p/11913626.html 作业博客 https://edu ...

  10. Hype-v创建服务器实例

    1.创建虚拟交换机,如下图所示(虚拟交换机,只需要创建一次,后面增加服务器实例的时候,只需要选择这个虚拟交换机就可以了,不用每次都创建) 2.服务器主网络共享给虚拟交换机,如下图所 3.虚拟交换机的I ...