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端实现监听实质: 实现一系列的监听接口(实现相应的接口,覆写各接口中相应的方法,在相应的事件触发的时候会执行自己的监听器中的覆写的方法,在各个方法中完成自己想要的操作,从而实现了监听) 监听- ...
随机推荐
- javascript实现继承的一种方式
function extend(Child, Parent) { var F = function(){}; F.prototype = Parent.prototype; Child.prototy ...
- Darwin Streaming Server 6.0.3安装、订制、插件或模块
How to setup Darwin Streaming Server 6.0.3 on 32 or 64 bit Linux platforms, add custom functionality ...
- Mac下配置PHP+Apache+phpMyAdmin+MySql远程链接
最近的项目是微信公众号平台的开发,微信官方给出的Demo是PHP的,发现大部分的学习资料也是PHP,那好吧,放弃Java,来段儿PHP吧 下面说说Mac下搭建PHP环境 数据库:MySQL-5.6.2 ...
- Android SDK Manager 更新代理配置 ,蛋碎了
启动 Android SDK Manager ,打开主界面,依次选择「Tools」.「Options...」,弹出『Android SDK Manager - Settings』窗口: 在『Andro ...
- MyBatis 如何接收参数
MyBatis的mapper接口不需要自己实现,框架会自动帮我们实现,到时候直接调用就可以了.定义的mapper接口中的方法可以有多个参数吗?答案是肯定.在Ibatis时代是自己通过代码实现如何调用x ...
- ECshop 二次开发模板教程3
<p>商品列表</p> <table width="70%" border="1"> <tr> <td&g ...
- 为SQL表添加全文索引范例
--范例: --为HR_Job中的JobTitle,JobDes创建全文索引 execute sp_fulltext_catalog 'boli188', 'create' --创建全文目录,boli ...
- HDU 5430 Reflect
题意:问在一个圆形的镜面里,从任意一点发出一个光源,经n次反射回到起点的情况数是多少. 解法:直接贴题解吧…… 求1至N+1中与N+1互质的个数,即欧拉函数. 代码: #include<stdi ...
- HDU 5745 La Vie en rose
La Vie en rose Time Limit: 14000/7000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- 《Python 学习手册4th》 第十三章 while和for循环
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...