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 ...
随机推荐
- python标准库介绍——29 zlib 模块详解
==zlib 模块== (可选) ``zlib`` 模块为 "zlib" 压缩提供支持. (这种压缩方法是 "deflate".) [Example 2-43 ...
- Sql 查询当天、本周、本月记录
--查询当天: select * from info where DateDiff(dd,datetime,getdate())=0 --查询24小时内的: select * from info wh ...
- 纯干货,Spring-data-jpa详解(转)
本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求.这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring ...
- java appium客户端 6.1.0android长按及滑动变更
今天使用appium 6.1.0 java客户端,发现长按longpress(element),无法使用.如下代码在5.0.4 版本是可以正常运行的, WebElement noteDelete = ...
- 更改 AWS RDS mysql时区 -摘自网络
AWS RDS AWS上搭建数据库的时候,不是DB on EC2就是RDS,但是选择RDS时,Timezone怎么处理? 「面向全球提供的AWS来讲理所当然的是UTC」,而RDS也不是例外.把服务器迁 ...
- redis 3.2.3的源码安装
Install necessary packages On CentOS : yum install wget make gcc tcl On CentOS yum install wget make ...
- extern C的作用具体解释
转载于:http://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html 1.引言 C++语言的创建初衷是"a better ...
- 【ARM】arm异常中断处理知识点
ARM处理器7种类型异常 按优先级从高到低的排列如下: 复位异常(Reset) 数据异常(Date Abort) 快速中断异常(FIQ) 外部中断异常(IRQ) 预取异常(Prefetch Abort ...
- pip3 install jupyter出现错误
问题描述 出现如下错误: Command "/Users/wang/.pyenv/versions/3.3.1/bin/python3.3 -u -c "import setupt ...
- Office_Visio_Pro_2007
Office_Visio_Pro_2007http://pan.baidu.com/share/link?shareid=473782&uk=3474501992 解压后在文件夹里找到密钥[一 ...