SessionObject监听器实现



SessionObject监听器实现实例源码,Session前调用监听器,session中移后调用监听器实例:

SessionObject_Listener.java文件源码:

package com.cn.listener;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.io.Serializable;
import java.util.Date;

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;

public class SessionObject_Listener implements
HttpSessionActivationListener,HttpSessionBindingListener, Serializable{// 同时实现多个Listener接口
private String name; // 人的名字
private Date dateCreated; // 创建日期

public void valueBound(HttpSessionBindingEvent event) { // 被放进Session前被调用
HttpSession session = event.getSession(); // 所在的Session
String name = event.getName(); // 在Session中的属性名
writer(this + “被绑定到session \”" + session.getId() + “\”的” + name + “属性上”);

this.setDateCreated(new Date()); // 记录放到session中的时间
}
public void valueUnbound(HttpSessionBindingEvent event) { // 从session中移除后被调用
HttpSession session = event.getSession(); // 发生变化的Session
String name = event.getName(); // 在Session中的属性名
writer(this + “被从session \”" + session.getId() + “\”的” + name + “属性上移除”);
}


public void sessionDidActivate(HttpSessionEvent se) { // 从硬盘恢复后被调用
HttpSession session = se.getSession(); // 所在的Session
writer(this + “已经成功从硬盘中加载。sessionId: ” + session.getId()); // 记录到日志
}

public void sessionWillPassivate(HttpSessionEvent se) { // 即将被钝化到硬盘时被调用
HttpSession session = se.getSession(); // 所在的Session
writer(this + “即将保存到硬盘。sessionId: ” + session.getId());
}
@Override
public String toString() {
return “PersonInfo(” + name + “)”; // 覆盖toString()方法
}
public void writer(String message){
PrintWriter printWriter = null;
try {
printWriter = new PrintWriter(new FileOutputStream(“D:\\sessionObject.txt”,true));
printWriter.println(new java.util.Date().toLocaleString()+” Session_Listener: “+message);
printWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}

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;
}
}

session_object_listener.jsp文件:

<%@ page language=”java” import=”java.util.*” pageEncoding=”utf-8″%>
<%@ page import=”com.cn.listener.SessionObject_Listener” %>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>My JSP ‘session_object_listener.jsp’ starting page</title>
</head>
<body>
<%
SessionObject_Listener listener = (SessionObject_Listener)session.getAttribute(“personInfo”); // 获取PersonInfo
if(listener == null){ // 如果没有
listener = new SessionObject_Listener(); // 则新创建一个
listener.setName(“Helloween”); // 设置人名
session.setAttribute(“personInfo”, listener); // 保存到Session
out.println(“PersonInfo 对象不存在。已经成功新建。sessionId: ” + session.getId());
}
else{
out.println(“PersonInfo 对象存在。无需新建。sessionId: ” + session.getId());
}
%>
</body>
</html>

web.xml文件:

<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app version=”2.5″
xmlns=”http://java.sun.com/xml/ns/javaee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”>
<listener>
<listener-class>com.cn.listener.SessionObject_Listener</listener-class>
</listener>

</web-app>