Javaweb监听器(2)
属性监听器:ServletRequestAtttributeListener/HttpSeessionAttributeListener/ServletContextAttributeListener
这里可以直接拿HttpSeessionAttributeListener来示例
首先来写一个实现他的接口类:
package comgqx.b_attr;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class MySesssionAttribute implements HttpSessionAttributeListener{
//属性添加
@Override
public void attributeAdded(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
//首先要获取session
HttpSession session=event.getSession();
//获取添加的属性
Object object=session.getAttribute("name");
System.out.println("添加的属性是:"+object);
}
//属性移除
@Override
public void attributeRemoved(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
System.out.println("属性移除了!");
}
//属性被替换
@Override
public void attributeReplaced(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
//获取session对象
HttpSession session=event.getSession();
// 获取替换之前的值
Object oldObject=event.getValue();
System.out.println("旧值:"+oldObject);
//获取新值
Object object=session.getAttribute("name");
System.out.println("新的sessiom值是:"+object);
}
}
来写一个jsp页面,写一句简单的话
session.setAttribute("name", "gqxing");
配置到服务器上去(web.xml)
<!-- 属性监听器Session --> <listener> <listener-class>comgqx.b_attr.MySesssionAttribute</listener-class> </listener>
访问相关的jsp页面可以看到如下结果:

然后我们在jsp去修改代码如下:
session.setAttribute("name", "gqxing");
//属性移除
session.removeAttribute("name");
清除缓存后,继续去访问,发现先关的语句被执行了。如下:

继续去修改jsp页面,如下,来些事替换session中的相关值
<% session.setAttribute("name", "gqxing");
//属性移除
//session.removeAttribute("name");
//属性替换
session.setAttribute("name", "test");
%>
清除缓存,继续访问,就会看到替换的语句,这里要注意的是,我们不经在HttpSessionAttributeListener的实现类的attributeReplaced()方法中得到新的值,还可以通过getValue()方法得到被替换的旧值,如下:

HttpSessionBindingListener:监听对象绑定、解除绑定到session上的事件
步骤:
对象实现此接口,在把对象绑定、解除绑定带session上就会自动触发监听代码。
示例代码:
package comgqx.b_attr;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
public class MySesssionAttribute implements HttpSessionAttributeListener{
//属性添加
@Override
public void attributeAdded(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
//首先要获取session
HttpSession session=event.getSession();
//获取添加的属性
Object object=session.getAttribute("name");
System.out.println("添加的属性是:"+object);
}
//属性移除
@Override
public void attributeRemoved(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
System.out.println("属性移除了!");
}
//属性被替换
@Override
public void attributeReplaced(HttpSessionBindingEvent event) {
// TODO Auto-generated method stub
//获取session对象
HttpSession session=event.getSession();
// 获取替换之前的值
Object oldObject=event.getValue();
System.out.println("旧值:"+oldObject);
//获取新值
Object object=session.getAttribute("name");
System.out.println("新的sessiom值是:"+object);
}
}
在jsp页面写入如下代码:
session.setAttribute("admin", new Admin());
session.removeAttribute("admin");
然后去访问,会看到控制台的看到如下的结果(有时候没有清楚缓存,在测试这个的时候会发现一些语句会重复,如若是第一次访问是去创建Admin对象,没有加入清除对象的语句,第二次加入清除对象的语句,再去访问,会看到两句“Admin对象已经从session中移除了!”的语句)

应用举例:可以作为上线提醒,比如qq,当一个好友上线的时候,系统会提示你的好友“****”上线了
HttpSessionBindingListener和前面的声明周期属性的监听器的区别是:
不用再web.xml上配置,因为监听的对象是自己创建的对象,不是服务器创建的对象。
Javaweb监听器(2)的更多相关文章
- JavaWeb监听器详解
1 JavaWeb监听器概述 在JavaWeb被监听的事件源为:ServletContext.HttpSession.ServletRequest,即三大域对象.有监听域对象"创建" ...
- 十四、JavaWeb监听器
JavaWeb监听器 三大组件: l Servlet l Listener l Filter Listener:监听器 初次相见:AWT 二次相见:SAX 监听器: l 它是一个接口,内容由我们来实现 ...
- Javaweb学习笔记——(二十)——————Javaweb监听器、国际化
Javaweb监听器 三大组件 *Servlet *Listener *Filter Listener:监听器 1.初次相见:A ...
- Day20 javaWeb监听器和国际化
day20 JavaWeb监听器 三大组件: Servlet Listener Filter Listener:监听器 初次相见:AWT 二次相见:SAX 监听器: 它是一个接口,内容由我们来 ...
- javaweb监听器实现与原理
参考:https://www.cnblogs.com/lxp503238/p/6678688.html https://blog.csdn.net/CPOHUI/article/details/888 ...
- JavaWEB监听器
1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象 ...
- JavaWeb—监听器Listener
1.简介 Listener是Servlet的监听器,Servlet 监听器用于监听一些重要事件的发生,监听器对象在事情发生前.发生后可以做一些必要的处理. JavaWeb里面的listener是通过观 ...
- JAVAWEB监听器(二)
监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信息事 ...
- Java-Web监听器
在WEB端实现监听实质: 实现一系列的监听接口(实现相应的接口,覆写各接口中相应的方法,在相应的事件触发的时候会执行自己的监听器中的覆写的方法,在各个方法中完成自己想要的操作,从而实现了监听) 监听- ...
随机推荐
- Java [Leetcode 205]Isomorphic Strings
题目描述: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the ...
- Java [Leetcode 231]Power of Two
题目描述: Given an integer, write a function to determine if it is a power of two. 解题思路: 判断方法主要依据2的N次幂的特 ...
- LeetCode: Binary Tree Level Order Traversal && Binary Tree Zigzag Level Order Traversal
Title: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ...
- 庖丁解牛-----Live555源码彻底解密(RTP解包)
Live555 客户端解包 以testRTSPClient.cpp为例讲解: Medium<-MediaSource<-FramedSource<-RTPSource<-Mul ...
- 【转】statfs获得硬盘使用情况 模拟linux命令 df
原文网址:http://blog.csdn.net/mociml/article/details/5335474 说明:本文以主要为转载内容,同时加入了我在使用过程中遇到问题对其的修正!!!!!!!! ...
- MySQL基础之第2章 Windows平台下安装与配置MySQL
2.1.msi安装包 2.1.1.安装 特别要注意的是,安装前要删除原来的my.ini和原来的data目录,改名也行,不然在最后一步会“apply security settings”报个1045错误 ...
- java中判断是否为中文
public boolean isChinese(String strName) { char[] ch = strName.toCharArray(); for (int i = 0; i < ...
- redis学习笔记之pipeline
redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常 会阻塞并等待redi ...
- Linux--使用expect进行自动交互
在linux下进行一些操作时,有时需要与机器进行一些交互操作,比如切换账号时输入账号密码,传输文件时输入账号密码登陆远程机器等,但有时候这些动作需要在shell脚本中进行,这个时候就可以使用expec ...
- ASP.NET单点登录(代码)
[p=25, null, left]由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录.在ASP.NET中实现单点登录其实很简单,下面就把主要的方法和全部 ...