HttpSessionActivationListener应用监听session实例



HttpSessionActivationListener应用监听session实例,servlet监听session应用。Jsp/servlet 标准不要求一个web容器支持分布式应用,但是他一定要支持HttpSessionActivationListener借口,以使代码可以支持分布式环境。一般免费的web容器都不支持分布式,weblogic websphere是支持的。为了负载均衡或者fail-over,web容器可以迁移一个session到其他的jvm.session的passivation是指非活动的session被写入持久设备(比如硬盘)。activate自然就是相反的过程。在分布式环境中切换的属性必须实现serializable接口。:

session_listener.jsp源码实例:

<%@ page language=”java” import=”java.util.*” pageEncoding=”utf-8″%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>My JSP ‘session_listener.jsp’ starting page</title>
</head>
<body>
<%
out.print(“SeesionListener”);
session.setAttribute(“SessionName”,”Jack”);
session.setAttribute(“SessionName”,”Micok”);
session.setAttribute(“SessionName”,”Micok”);
session.removeAttribute(“SessionName”);
session.invalidate();
%>
</body>
</html>

HttpSession_Listener.jsp源码:

package com.cn.listener;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;

import javax.management.j2ee.statistics.ServletStats;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class HttpSession_Listener implements HttpSessionActivationListener,HttpSessionListener,
ServletContextListener,HttpSessionAttributeListener{
int users =0;
ServletContext context = null;
public void sessionDidActivate(HttpSessionEvent arg0) {
// TODO 监听HttpSession的active情况
writer(“sessionDidActivate(“+arg0.getSession().getId()+”)”);
}

public void sessionWillPassivate(HttpSessionEvent arg0) {
// TODO 监听HttpSession的Passivate情况
writer(“sessionWillPassivate(“+arg0.getSession().getId()+”)”);
}

public void sessionCreated(HttpSessionEvent arg0) {
// TODO HttpSession的创建监听
users++;//创建一个会话,把users变量+1
writer(“sessionCreated(“+arg0.getSession().getId()+”目前拥有”+users+”个用户”+”)”);//目前应用的用户个数
//把会话数设置到ServletContext的属性users中
context.setAttribute(“users”, new Integer(users));
}


public void sessionDestroyed(HttpSessionEvent arg0) {
// TODO HttpSession的释放监听
users–;
writer(“sessionCreated(“+arg0.getSession().getId()+”目前拥有”+users+”个用户”+”)”);//目前应用的用户个数
//把会话数设置到ServletContext的属性users中
context.setAttribute(“users”, new Integer(users));
}

public void contextDestroyed(ServletContextEvent arg0) {
// TODO 监听Servlet上下文被释放
this.context=null;
writer(“ServletContext被释放”);
}

public void contextInitialized(ServletContextEvent arg0) {
// TODO dui ServletContext进行初始化
this.context = arg0.getServletContext();//初始化ServletContext对象
writer(“ServletContext被初始化”);
}

public void attributeAdded(HttpSessionBindingEvent arg0) {
// TODO 监听Http会话中的属性添加
writer(“attributeAdded(“+arg0.getSession().getId()
+”,”+arg0.getName()+”,”+arg0.getValue()+”)”);
}

public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO 监听Http会话中的属性删除
writer(“attributeRemoved(“+arg0.getSession().getId()
+”,”+arg0.getName()+”,”+arg0.getValue()+”)”);
}

public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO 监听HttpSession中的属性更新
writer(“attributeReplaced(“+arg0.getSession().getId()
+”,”+arg0.getName()+”,”+arg0.getValue()+”)”);

}
public void writer(String message){
PrintWriter printWriter = null;
try {
printWriter = new PrintWriter(new FileOutputStream(“D:\\session.txt”,true));
printWriter.println(new java.util.Date().toLocaleString()+” Session_Listener: “+message);
printWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}

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.HttpSession_Listener</listener-class>
</listener>
</web-app>