编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

HttpSession 监听器

HttpSessionListener:监听Session对象

package com.listener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
public class HttpSessionListener implements javax.servlet.http.HttpSessionListener {
    /**
     * 通知会话已创建。
     * session创建之后调用
     */
    @Override
    public void sessionCreated(HttpSessionEvent event) {
        System.out.println("session创建之后");
        HttpSession session = event.getSession();
    }
    /**
     * 通知会话即将失效。
     * session销毁之前调用
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent event) {
        System.out.println("session销毁之前");
        HttpSession session = event.getSession();
    }
}
<!-- HttpSession对象监听器 -->
<listener>
    <listener-class>com.listener.HttpSessionListener</listener-class>
</listener>

HttpSessionAttributeListener:监听Session中的属性操作

package com.listener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
public class HttpSessionAttributeListener implements javax.servlet.http.HttpSessionAttributeListener {
    /**
     * 通知某个属性已被添加到会话中。 在添加属性后调用。
     */
    @Override
    public void attributeAdded(HttpSessionBindingEvent event) {
        System.out.println("session添加属性后调用");
        HttpSession session = event.getSession();
        String name = event.getName();
        Object value = event.getValue();
        System.out.println("被添加到session中的属性:" + "key=" + name + "   ,value=" + value);
    }
    /**
     * 通知某个属性已从会话中删除。 在属性被删除后调用。
     */
    @Override
    public void attributeRemoved(HttpSessionBindingEvent event) {
        System.out.println("session删除属性后调用");
        HttpSession session = event.getSession();
        String name = event.getName();
        Object value = event.getValue();
        System.out.println("被删除的session中的属性:" + "key=" + name + "   ,value=" + value);
    }
    /**
     * 在会话中通知属性已被替换。 在属性被替换后调用。
     */
    @Override
    public void attributeReplaced(HttpSessionBindingEvent event) {
        System.out.println("session替换属性后调用");
        HttpSession session = event.getSession();
        String name = event.getName();
        Object value = event.getValue();
        System.out.println("被替换的session中的属性:" + "key=" + name + "   ,替换之前的value=" + value);
    }
}
<!-- HttpSession属性的操作监听器 -->
<listener>
    <listener-class>com.listener.HttpSessionAttributeListener</listener-class>
</listener>

HttpSessionBindingListener监听器:感知Session绑定的事件监听器

package com.listener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
public class HttpSessionBindingListener implements javax.servlet.http.HttpSessionBindingListener {
    /**
     * 通知对象它正在被绑定到会话并标识会话。(还未绑定)
     */
    @Override
    public void valueBound(HttpSessionBindingEvent event) {
        System.out.println("当前对象正在绑定到session中,还未绑定");
        HttpSession session = event.getSession();
        String name = event.getName();
        Object value = event.getValue();
        System.out.println("将要被绑定到session中的key值:" + name + "value值:" + value);
        System.out.println("value值是否是当前对象:" + (value == this));//true
        Object valueNow = session.getAttribute(name);
        System.out.println("valueNow:" + valueNow);//null,还未绑定
    }
    /**
     * 通知对象它正在从会话中解除绑定并标识会话。(还未解除绑定)
     */
    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        System.out.println("当前对象它正在从会话中解除绑定");
        HttpSession session = event.getSession();
        String name = event.getName();
        Object value = event.getValue();
        System.out.println("将要解除绑定session中的key值:" + name + "value值:" + value);
        System.out.println("value值是否是当前对象:" + (value == this));//true
        Object valueNow = session.getAttribute(name);
        System.out.println("valueNow:" + valueNow);//null,还未解除绑定
    }
}

测试页面

<%@page import="cn.itcast.erp.listener.session.HttpSessionBindingListener"%>
<%@page import="cn.itcast.erp.listener.session.HttpSessionActivationListener"%>
<%@page language="java" pageEncoding="UTF-8"%>
<!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>测试HttpSessionActivationListener监听(session的活化和钝化)</title>
  </head>
  <body>
    <% 
        //测试session活化和钝化监听器HttpSessionActivationListener
        session.setAttribute("sessionActivation",new HttpSessionActivationListener1());
        //测试session绑定和解绑监听器
        session.setAttribute("sessionBind", new HttpSessionBindingListener1());
        session.removeAttribute("sessionBind");
    %>
    <h1>session活化和钝化监听</h1>
  </body>
</html>

HttpSessionActivationListener:监听HTTP会话的active和passivate情况,passivate是指非活动的session被写入持久设备(比如硬盘),active相反。注意:HttpSessionActivationListener不需要web.xml配置文件。

未经允许不得转载: 技术文章 » Java编程 » HttpSession 监听器