博客已迁移到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. root of context hierarchy

    Spring Boot项目,运行不明中断.日志如下: 2018-11-03 11:03:43.358 INFO [Thread-2][AbstractApplicationContext.java:9 ...

  2. chrome jssip

    WebRTC 实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单的javascript就可以达到实时通讯(Real-Time Communications (RTC))能力 ...

  3. iOS-VideoToolbox硬编码H264

    前言 VideoToolBox是iOS8之后,苹果开发的用于硬解码编码H264/H265(iOS11以后支持)的API. 对于H264还不了解的童鞋一定要先看下这边的H264的简介. 编码流程 我们实 ...

  4. iTerm 2打造ssh完美连接Linux服务器快捷方法

    iTerm 2打造ssh完美连接Linux服务器快捷方法 2019年05月02日 10:40:19 Mars0908 阅读数 213更多 个人分类: Mac下开发   版权声明:本文为博主原创文章,遵 ...

  5. ajax传参数json对象到后台获取

    类型1 var version = $("#version").val(); var ids[i] = ("127.0.0.1","192.168.1 ...

  6. kotlin 委托类的初始化函数

    import java.beans.AppletInitializer import kotlin.reflect.KProperty fun main(arg: Array<String> ...

  7. yum -y与 yum有什么区别

    在linux中,经常使用yum来进行软件的安装,更新与卸载,那我们会发现,在使用yum的时候,通常有下面两种指令模式: ①yum install  xxx ②yum -y install  xx 那这 ...

  8. 解决 Windows启动时要求验证

    KB971033 微软检测盗版jar SLMGR -REARM 出现Window启动时要求验证版本, 在cmd窗口输入命令重新配置 重新启动即可 出现错误:解决办法 开始→设置,打开控制面板的“添加和 ...

  9. 请求路径@PathVariable注释中有点.英文句号的问题(忽略英文句号后面的后缀)

    前端页面请求地址 <video id=example-video width=960 height=540 class="video-js vjs-default-skin" ...

  10. L1、L2正则化详解

    正则化是一种回归的形式,它将系数估计(coefficient estimate)朝零的方向进行约束.调整或缩小.也就是说,正则化可以在学习过程中降低模型复杂度和不稳定程度,从而避免过拟合的危险. 一. ...