监听器(listener):对项目起到监听的作用,它能感知到包括request(请求域),session(会话域)和applicaiton(应用程序)的初始化和属性的变化

  监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建和销毁事件,它还可以监听域对象的属性发生修改的事件,可以在事件发生前或者发生后做一些必要的处理

  这三个监听器接口分别是ServletContextAttributeListener, HttpSessionAttributeListener 和ServletRequestAttributeListener,这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同

  

session和application监听器

  application监听器

package com.Gary.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener; @WebListener
public class ApplicationListener implements ServletContextListener{ @Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
System.out.println("application被销毁出来");
} @Override
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
System.out.println("application被创建出来,这里可以做一些初始化的事情");
} }

ApplicationListener.java

package com.Gary.listener;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener; @WebListener
public class SessionListener implements HttpSessionListener { public SessionListener() {
// TODO Auto-generated constructor stub
} public void sessionCreated(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("sessionCreated被创建");
} public void sessionDestroyed(HttpSessionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("sessionCreated被销毁");
} }

SessionListener.java

package com.Gary.listener;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener; @WebListener
public class RequestListener implements ServletRequestListener { public RequestListener() {
// TODO Auto-generated constructor stub
} public void requestDestroyed(ServletRequestEvent arg0) {
System.out.println("requestDestroyed");
} public void requestInitialized(ServletRequestEvent arg0) {
// TODO Auto-generated method stub
System.out.println("requestInitialized");
} }

RequestListener.java

 配置监听器方式

  监听器申明

@WebListener

  

  web.xml中配置监听器

      <listener>
<listener-class></listener-class>
</listener>
<!--   <listener> -->
<!-- <listener-class>com.Gary.listener.SessionListener</listener-class> -->
<!-- </listener> --> <!-- Session超过1分钟后,服务器会自动放弃Session信息 默认三十分钟-->
<session-config>
<session-timeout>1</session-timeout>
</session-config>

application的属性监听器

  当整个项目启动时,系统会往application中塞一些东西调用一次attributeAdded(),进入attributelistener.jsp后若不存在application.setAttribute("number",100)时候会再一次调用attributeAdded(),当存在application.setAttribute("number",100)时系统会调用attributeReplaced()

  ApplicationAttributeListener用来监听application.setAttribute()和application.removeAttribute()

  同理session和requset

<%
application.setAttribute("number",100);
// application.removeAttribute("number");
%>

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
application.setAttribute("number",100);
// application.removeAttribute("number");
%>
</body>
</html>

attributelistener.jsp

package com.Gary.listener;

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.annotation.WebListener; @WebListener
public class ApplicationAttributeListener implements ServletContextAttributeListener{ @Override
public void attributeAdded(ServletContextAttributeEvent arg0) {
// TODO Auto-generated method stub
System.out.println("attributeAdded");
} @Override
public void attributeRemoved(ServletContextAttributeEvent arg0) {
// TODO Auto-generated method stub
System.out.println("attributeRemoved");
} @Override
public void attributeReplaced(ServletContextAttributeEvent arg0) {
// TODO Auto-generated method stub
// arg0.getName();
System.out.println("attributeReplaced");
} }

ApplicationAttributeListener.java

Session实现单点登录(备份)

  同一用户登录同一网址时会把前一个用户挤下来

public class SessionManager {
public static Map<String,HttpSession> sessionMap = new HashMap<String,HttpSession >();
}
    public void attributeAdded(HttpSessionBindingEvent arg0)  {
if(arg0.getName().equals("user")) {
User u = (User) arg0.getValue();
//判断是否有其他客户端已经登录
if(SessionManager.sessionMap.containsKey(u.getUsername())) {
//获得另外一个客户端的session
HttpSession session = SessionManager.sessionMap.get(u.getUsername());
//把登录信息从这个客户端抹除
session.removeAttribute("user");
//从session集合里面移除对应的用户名
SessionManager.sessionMap.remove(u.getUsername());
} SessionManager.sessionMap.put(u.getUsername(), arg0.getSession());
}
}
package com.sikiedu.util;

import java.util.HashMap;
import java.util.Map; import javax.servlet.http.HttpSession; public class SessionManager {
public static Map<String,HttpSession> sessionMap = new HashMap<String,HttpSession >();
}

SessionManager.java

  

package com.sikiedu.listener;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent; import com.sikiedu.model.User;
import com.sikiedu.util.SessionManager; /**
* Application Lifecycle Listener implementation class SessionAttributeListener
*
*/
@WebListener
public class SessionAttributeListener implements HttpSessionAttributeListener { /**
* Default constructor.
*/
public SessionAttributeListener() {
// TODO Auto-generated constructor stub
} /**
* @see HttpSessionAttributeListener#attributeAdded(HttpSessionBindingEvent)
*/
public void attributeAdded(HttpSessionBindingEvent arg0) {
if(arg0.getName().equals("user")) {
User u = (User) arg0.getValue();
//判断是否有其他客户端已经登录
if(SessionManager.sessionMap.containsKey(u.getUsername())) {
//获得另外一个客户端的session
HttpSession session = SessionManager.sessionMap.get(u.getUsername());
//把登录信息从这个客户端抹除
session.removeAttribute("user");
//从session集合里面移除对应的用户名
SessionManager.sessionMap.remove(u.getUsername());
} SessionManager.sessionMap.put(u.getUsername(), arg0.getSession());
}
} /**
* @see HttpSessionAttributeListener#attributeRemoved(HttpSessionBindingEvent)
*/
public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
System.out.println("attributeRemoved");
} /**
* @see HttpSessionAttributeListener#attributeReplaced(HttpSessionBindingEvent)
*/
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
System.out.println("sessionattributeReplaced");
} }

SessionAttributeListener.java

JavaWeb_初识监听器Listener的更多相关文章

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

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

  2. javaWeb学习总结(11)- 监听器(Listener)在开发中的应用

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

  3. javaWeb学习总结(11)- 监听器(Listener)学习

    一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其 实就是一个实现特定接口的普 ...

  4. [09] 监听器 Listener

    1.事件 1.1 事件的概念 在Servlet中有一个概念叫做监听,顾名思义,就是监听某种事件是否发生.就如你是一家娱乐媒体公司的老板,你派出狗仔队去跟着某些明星,比如你想了解他们的绯闻,或者活动进展 ...

  5. java之Servlet监听器Listener

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

  6. 过滤器Filter与监听器Listener

    过滤器Filter 过滤器也是一种servlet   它也可以对用户的请求进行处理  , 但是他所做的处理,只是一些轻量级的处理.Fileter就好像jsp页面与servlet之间的一道关卡,如果这个 ...

  7. JAVA监听器Listener

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

  8. 过滤器(Filter)、拦截器(Interceptor)、监听器(Listener)

    一.Filter 过滤器 1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servle ...

  9. JavaWeb学习 (二十七)————监听器(Listener)在开发中的应用

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

随机推荐

  1. 01:keepalive高可用集群

    1.1 keepalived高可用软件介绍 1.keepalived--监控检查 注:keepalive软件有两种功能:监控检查.VRRP冗余协议 1. keepalive的作用是检测web服务器的状 ...

  2. 使用git保存管理代码

    1.git是个代码版本管理软件,类似SVN github是个网站,提供git服务,我们只需要注册个账号,就可以使用它的git服务,不需要自己部署git系统 git需要先在电脑端安装,安装完成后,讲产生 ...

  3. oracle查看执行计划以及使用场景

    文档结构: oracle执行计划使用场景 环境: Centos 6.10 Oracle 18.3.0.0.0 c 11g默认启动了自动统计信息收集的任务,默认运行时间是周一到周五晚上10点和周6,周天 ...

  4. java构造方法的注意事项总结

    构造方法细节总结~~~~~ 1:首先要了解为什么需要构造方法,,,类中有太多的属性,每次给属性赋值时非常麻烦:编码量大,无法重用给属性赋值的代码.. 2:什么是构造方法呢? 构造方法负责初始化类中的实 ...

  5. WPF最小化窗体后激活函数显示不了窗体

    WPF最小化窗体后激活函数显示不了窗体 今天测试小哥给我提了一些问题,其中一个问题是这样的,点击web端的一个链接,是能启动本地的一个应用程序的,如果本地应用程序已启动(通过tcp进程间通信),那么应 ...

  6. sql server isnull函数

    isnull函数 --ISNULL() 函数用于规定如何处理 NULL 值 语法:SELECT ISNULL(check_expression, replacement_value) --check_ ...

  7. MVC 部署到服务器

    1.Nuget程序包管理 —>程序包管理控制台,运行以下命令即可:Update-Package Microsoft.AspNet.WebApi -reinstall 2.dll文件的缺少,覆盖

  8. 如何在Python中快速画图——使用Jupyter notebook的魔法函数(magic function)matplotlib inline

    如何在Python中快速画图--使用Jupyter notebook的魔法函数(magic function)matplotlib inline 先展示一段相关的代码: #we test the ac ...

  9. python读写txt文件

    整理平常经常用到的文件对象方法: f.readline()   逐行读取数据方法一: >>> f = open('/tmp/test.txt') >>> f.rea ...

  10. 01 Redis基础

    NoSQL 学名(not only sql) 特点: 存储结构与mysql这一种关系型数据库完全不同,nosql存储的是KV形式 nosql有很多产品,都有自己的api和语法,以及业务场景 产品种类: ...