JavaWeb_初识监听器Listener
监听器(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的更多相关文章
- javaweb学习总结(四十七)——监听器(Listener)在开发中的应用
监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听 ...
- javaWeb学习总结(11)- 监听器(Listener)在开发中的应用
监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听 ...
- javaWeb学习总结(11)- 监听器(Listener)学习
一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其 实就是一个实现特定接口的普 ...
- [09] 监听器 Listener
1.事件 1.1 事件的概念 在Servlet中有一个概念叫做监听,顾名思义,就是监听某种事件是否发生.就如你是一家娱乐媒体公司的老板,你派出狗仔队去跟着某些明星,比如你想了解他们的绯闻,或者活动进展 ...
- java之Servlet监听器Listener
常用应用场景:单点登录.统计在线人数 一.简介 (一)概述 1.Listener 用于监听 java web程序中的事件,例如创建.修改.删除Session.request.context等,并触发响 ...
- 过滤器Filter与监听器Listener
过滤器Filter 过滤器也是一种servlet 它也可以对用户的请求进行处理 , 但是他所做的处理,只是一些轻量级的处理.Fileter就好像jsp页面与servlet之间的一道关卡,如果这个 ...
- JAVA监听器Listener
JAVA监听器Listener 一. 简介 监听器用于对web中内置对象的状态或者属性变化进行监听并做出相应响应的一种Servlet;在内置对象的生命周期中,产生.销毁等状态发生变化时,监听器就会进行 ...
- 过滤器(Filter)、拦截器(Interceptor)、监听器(Listener)
一.Filter 过滤器 1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servle ...
- JavaWeb学习 (二十七)————监听器(Listener)在开发中的应用
监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听 ...
随机推荐
- [BJOI2014]大融合(Link Cut Tree)
[BJOI2014]大融合(Link Cut Tree) 题面 给出一棵树,动态加边,动态查询通过每条边的简单路径数量. 分析 通过每条边的简单路径数量显然等于边两侧节点x,y子树大小的乘积. 我们知 ...
- node工具之nodemon
nodemon nodemon是一种工具,可以自动检测到目录中的文件更改时通过重新启动应用程序来调试基于node.js的应用程序. 安装 npm install -g nodemon //或 npm ...
- @RequestMapping-标准映射和Ant风格的映射
4.@RequestMapping 如果value不以“/”开头,SpringMVC会自动添加“/” 4.1.@RequestMapping映射 4.1.1.标准URL映射 4.1.2.Ant风格的U ...
- ccs之经典布局(一)(水平垂直居中)
经典的css布局有以下几种,下面分别用不同的方法进行实现且进行对比. 一.水平居中 水平居中布局指的是当前元素在父级元素的容器中,水平方向上显示的是居中的,有以下几种方式来完成布局: 1.margin ...
- Visual Studio 2010中的js注释
Visual Studio 2010中的js注释已经很强大了,但怎么才能和调用c#的方法一样容易呢?怎样才能让每个参数都有注释说明呢?底下就是想要的答案. 先上图,如图所示: 其中红色的办法为注释效果 ...
- 2019-11-29-asp-dotnet-core-通过图片统计-csdn-用户访问
title author date CreateTime categories asp dotnet core 通过图片统计 csdn 用户访问 lindexi 2019-11-29 08:26:58 ...
- NDK: ant 错误 [javah] Exception in thread "main" java.lang.NullPointerException 多种解决办法
1.错误提示内容 2.ant脚本对应的内容 <?xml version="1.0" encoding="UTF-8"?> <!-- ===== ...
- 9、linux权限-ACL权限
来自为知笔记(Wiz)
- git push 到 github
今天来简单整理一下,如何利用git命令把代码提交到GitHub平台上去,当然要提交代码到GitHub上去,您首先得要有GitHub账号,账号如何申请这里就不多做解释了 第一步:先到官网下载git安装包 ...
- SecureCRT 连接 Centos7.0 (NAT模式),且能连接公网。
1.打开物理主机运行-输入cmd,输入ipconfig,获取物理主机ip地址. ip:192.168.11.138 2.点击网络适配器,选择NAT模式. 3.点击Centos界面左上角-编辑-虚拟网络 ...