Listener 监听Session内的对象
Listener用于监控Session内的对象,分别是HttpSessionBindingListener与HttpSessionActivationListener。它们的触发时机分别为:
- HttpSessionBindingListener:当对象被放到Session里时执行valueBound(HttpSessionBindingEvent event)方法。当对象被从Session里移除时执行valueUnbound(HttpSessionBingdingEvent event)方法。对象必须实现该Listener接口。
- HttpSessionActivationListener:服务器关闭时,会将Session里的内容保存到硬盘上,这个过程叫做钝化。服务器重新启动时,会将Session内容从硬盘上重新加载。当Session里的对象被钝化时会执行sessionWillPassivate(HttpSessionEvent event)方法。当对象被重新加载时执行sessionDidActivate(HttpSessionEvent event)。对象必须实现该Listener接口。
事例如下:
package linstener; import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.Date;
import java.util.Locale; import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import javax.servlet.http.HttpSessionEvent; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; public class PersonInfo implements HttpSessionActivationListener,HttpSessionBindingListener,Serializable { /**
*
*/
private static final long serialVersionUID = 1L;
private Log log=LogFactory.getLog(this.getClass());
private String name;
private Date dateCreated; @Override
public void sessionDidActivate(HttpSessionEvent arg0) {
//从硬盘恢复后被调用
HttpSession session =arg0.getSession();
log.info(this+"已经成功硬盘中加载。sessionid:" +session.getId());
} @Override
public void sessionWillPassivate(HttpSessionEvent arg0) {
//即将被钝化到硬盘时调用
HttpSession session=arg0.getSession();
log.info(this+"即将保存到硬盘。sessionid:"+session.getId());
} @Override
public void valueBound(HttpSessionBindingEvent arg0) {
//被放入session前调用
HttpSession session=arg0.getSession();
String name=arg0.getName();
log.info(this+"被绑定到session\""+session.getId()+"\"的"+name+"属性上。");
this.setDateCreated(new Date());
} @Override
public void valueUnbound(HttpSessionBindingEvent arg0) {
//从session 中移除后调用
HttpSession session=arg0.getSession();
String name=arg0.getName();
log.info(this+"被从session\""+session.getId()+"\"的"+name+"属性上移除。");
} public Date getDateCreated() {
return dateCreated;
} public void setDateCreated(Date dateCreated) {
this.dateCreated = dateCreated;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "PersonInfo("+name+")";
} }
这两个Listener监听的是Session中的对象而非Session等,因此不需要在web.xml中声明。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:directive.page import="linstener.PersonInfo" />
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
PersonInfo personInfo =(PersonInfo)session.getAttribute("personInfo");
if(personInfo==null){
personInfo=new PersonInfo();
personInfo.setName("Alex Geng");
session.setAttribute("personInfo", personInfo);
out.println("PersonInfo 对象不存在。已经成功新信件。sessionId:"+session.getId());
}
else{
out.println("PersonInfo对象存在。无需新建。sessionId:"+session.getId());
}
%>
</body>
</html>
Listener 监听Session内的对象的更多相关文章
- Listener 监听对象的属性变化
Listener用于监听Session.context.Request的属性变化,接口名称格式为xxxAttributeListener,包括HttpSessionAttributeListener. ...
- Listener 监听对象的创建和销毁
HttpSessionListener.ServletContextListener.ServletRequestListener分别用于控制Session.context.request的创建和销毁 ...
- java多个listener监听
java 多个listener 监听方法 在class 名称上一行添加@Listeners 括号中用逗号隔开 @Listeners({com.example.MyListener.class,com. ...
- SpringMVC拦截器实现:当用户访问网站资源时,监听session是否过期
SpringMVC拦截器实现:当用户访问网站资源时,监听session是否过期 一.拦截器配置 <mvc:interceptors> <mvc:interceptor> < ...
- 【Java EE 学习 21 上】【其它类型的监听器】【使用HttpSessionActivationListener监听session的活化和钝化】
一.ServletContextListener Method Summary void contextDestroyed(ServletContextEvent sce) R ...
- HttpSessionListener和HttpSessionBindingListener监听session的销毁
1. 使用HttpSessionListener public class OnlineUserListener implements HttpSessionListener { public voi ...
- javaWeb学习之Listener监听
] 一.监听器Listener javaEE包括13门规范 在课程中主要学习 servlet技术 和 jsp技术 其中 servlet规范包括三个技术点:servlet listener filt ...
- Android Listener 监听的几种写法
Android中,View的Listener方法,在是否使用匿名类匿名对象时,有各种不同的写法. OnClickListener和其他Listener方法一样,都是View类的接口,重载实现后就能使用 ...
- 怎样绕过oracle listener 监听的password设置
怎样绕过oracle 监听的password设置: 1.找到监听进程pid ,并将它kill 掉 ps -ef|grep tns [oracle@lixora admin]$ ps -ef|gr ...
随机推荐
- php实现ZIP压缩文件解压缩(转)
测试使用了两个办法都可以实现: 第一个:需要开启配置php_aip.dll <?php //需开启配置 php_zip.dll //phpinfo(); header("Content ...
- css冻结列的效果
<!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8&quo ...
- Git--团队开发必备神器
花了两天时间专门搞了一下git.整理一下分享给大家.以下我们開始.. . 转载请注明出处: http://blog.csdn.net/Hello_Chillax/article/details/474 ...
- eclipse再见,android studio 新手新手教程(一)基本设置
写在前面: 作为一个刚半仅仅脚踏入android开发的新手,在使用eclipse开发了两个自我感觉不甚成熟的商城类app之后.遇到了一些问题,总结为例如以下: 1,代码复用性. findviewByI ...
- linux命令(43):awk的使用技巧
AWK是一种处理文本文件的语言,是一个强大的文本分析工具. 之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Fam ...
- 【DIOCP-DEMO说明】所有演示DEMO的简要说明
samples目录下面为自带的DEMO 发现有很多朋友不知道如何开始DIOCP,下面是DEMO的简单说明,希望对大家有用 C#\Simple 用C#写的一个简单的回传测试,服务端开启ECHO服务器 ...
- 【流媒体】UPnP的工作过程
UPnP简介 通用即插即用(英语:Universal Plug and Play,简称UPnP)是由“通用即插即用论坛”(UPnP™ Forum)推广的一套网络协议. 该协议的目标是使家庭网络(数据共 ...
- 将本地代码同步到远程github上
1.在本地文件夹下建立.gitignore文件,将github下的github/gitignore/Node.gitignore文件复制到.gitignore中: 2.执行命令git add . 3. ...
- 在IIS7上部署aspx网站
在IIS7上部署aspx网站 2016-12-06 1 示例代码 WebForm.aspx内容: <html> <head> <script language=" ...
- ubuntu rar文件解压中文乱码问题
http://blog.csdn.net/android_huber/article/details/7382867 前段时间经常要在ubuntu系统中去解压rar的文件,但是每次解压出来却总是出现中 ...