好记性不如烂笔头43-javaWeb中Session相关事件监听器(7)

JavaWeb应用中,很多的地方都和session有关。因此session相关的事件监听器,在日常工作中非常有用。

Servlet 规范中定义了两个特殊的监听器接口”HttpSessionBindingListener和HttpSessionActivationListener”来帮助JavaBean 对象了解自己在Session域中的这些状态变化,实现这两个接口的类不需要 web.xml 文件中进行注册。

1、 HttpSessionBindingListener接口

  实现了HttpSessionBindingListener接口的JavaBean对象可以感知自己被绑定到Session中和 Session中删除的事件

  当对象被绑定到HttpSession对象中时,web服务器调用该对象的void valueBound(HttpSessionBindingEvent event)方法

  当对象从HttpSession对象中解除绑定时,web服务器调用该对象的void valueUnbound(HttpSessionBindingEvent event)方法

2、 HttpSessionActivationListener接口

  实现了HttpSessionActivationListener接口的JavaBean对象可以感知自己被活化(反序列化)和钝化(序列化)的事件

  当绑定到HttpSession对象中的javabean对象将要随HttpSession对象被钝化(序列化)之前,web服务器调用该javabean对象的void sessionWillPassivate(HttpSessionEvent event) 方法。这样javabean对象就可以知道自己将要和HttpSession对象一起被序列化(钝化)到硬盘中.

  当绑定到HttpSession对象中的javabean对象将要随HttpSession对象被活化(反序列化)之后,web服务器调用该javabean对象的void sessionDidActive(HttpSessionEvent event)方法。这样javabean对象就可以知道自己将要和 HttpSession对象一起被反序列化(活化)回到内存中

3、 javaBean感知自己被绑定到session中的源代码

实现了HttpSessionBindingListener接口的JavaBean对象可以感知自己被绑定到Session中和 Session中删除的事件

  当对象被绑定到HttpSession对象中时,web服务器调用该对象的void valueBound(HttpSessionBindingEvent event)方法

  当对象从HttpSession对象中解除绑定时,web服务器调用该对象的void valueUnbound(HttpSessionBindingEvent event)方法。

示例源代码如下:


package com.servlet.listener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

/**
 * 简单实现HttpSessionBindingListener接口,知道本JAVABEAN是否被加入到session中。
 * @author 范芳铭
 */
public class EasyLisenterSelf implements HttpSessionBindingListener{
    private String name;
    public EasyLisenterSelf(String name){
        this.name = name;
    }

    @Override
    public void valueBound(HttpSessionBindingEvent event) {
        System.out.println(name+",加入session。");
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        System.out.println(name+",session移除。");
    }

    public String getName() {
        return name;
    }
}

4、 测试用的session.jsp

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import= "com.servlet.listener.EasyLisenterSelf" %>
<!DOCTYPE HTML>
<html>
  <head>
    <title>简单测试</title>
  </head>
  <body>
    <%
        //将javabean对象绑定到Session中
        session.setAttribute("bean",new EasyLisenterSelf("javaBean监控自己"));
        //从Session中移除javabean对象
        session.removeAttribute("bean");
    %>
  </body>
</html>

5、 运行结果

启动WEB中间件,从URL访问:

http://127.0.0.1:8080/webStudy/session.jsp

控制台打印情况:

javaBean监控自己,加入session。

javaBean监控自己,session移除。

时间: 2024-10-09 10:43:54

好记性不如烂笔头43-javaWeb中Session相关事件监听器(7)的相关文章

好记性不如烂笔头40-javaWeb应用中HttpSession域的监听(4)

JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件. HttpSessionListener 接口用于监听HttpSession对象的创建和销毁 创建一个Session时, sessionCreated (HttpSessionEvent se): 销毁一个Session时, sessionDestroy

好记性不如烂笔头41-javaWeb应用中ServletRequest域的监听(5)

JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件. ServletRequestListener接口用于监听ServletRequest 对象的创建和销毁 Request对象被创建时,requestInitialized(ServletRequestEvent sre)方法将会被调用 Request对象

好记性不如烂笔头39-javaWeb应用中的监听器(1)

监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动. JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件. 1. Servlet监听器的分类 在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源为ServletCont

好记性不如烂笔头30-java应用中的过滤器Filter(2)

Filter的创建和销毁由WEB服务器负责. web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作,filter对象只会创建一次,init方法也只会执行一次.通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象. Web容器调用destroy方法销毁Filter.destroy方法在Filter的生命周期中仅执行一次.在destroy方法中,可以释放过滤器使用的

好记性不如烂笔头31-java应用中的敏感词过滤实现(3)

敏感词过滤,国内混的同学看到这个都会会心一笑.其实敏感词过滤,在几乎所有国家都是存在的,只是表现的形式并不完全相同而已. 既然这个功能叫做关键词过滤,那么做在过滤器中,应该是一个好主意. 1.JAVA实现利用过滤器实现敏感信息过滤 过滤器的JAVA代码: package com.filter; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.

好记性不如烂笔头34-java应用中的监听器Listener(1)

监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行. 在很多的地方,很多的行为,都需要去监听.比如我们有一辆汽车,汽车点火之后,我们要检查汽车的各项状态:汽车开动之后,要做一些处理,这些都可以通过监听去实现. 我们如果想设计一个汽车,让这个汽车的各种状态可以被别

好记性不如烂笔头35-java监听windows窗口事件Listener(2)

java监听windows窗口事件,现在几乎用的很少了. 当初我还在大学求学的时候,刚开始学习JAVA,对于它监听windows窗口事件,其实花费了非常多的精力.自己不是一个很机灵的人,很多的概念怎么看也不是很明白,很多的逻辑只能靠死记硬背,很多的概念记住了很快又忘记了- 当年的JAVA,还是没有放弃桌面应用这个领域,这些年过去了,java在PC的桌面应用上几乎是一败涂地,倒是在互联网和移动设备上大放光彩,至少这些,是我当初学习的时候不曾想到的. 这种类似的功能,现在几乎已经基本没有了用武之地.

Python学习中的随笔,好记性不如烂笔头

本文 为博主看了 vamei 的blog 写下的随笔 . 致敬Vamei 1.type()   可以显示参数的类型 如 : a=12   type(a) 为 int 2.python的基本类型 为 int float bool string   如 int :  i=1   ,   float :  f=12.5  ,  bool : b= True  or  Flase , string :  s='Hello , word !' 使用前无需声明类型  即 动态类型 3.1序列有 tuple

好记性不如烂笔头48-java拦截器-JDK自带动态代理和CGLIB效率比较(3)

Java中自带的动态代理的类必须要实现一个接口,而且据说使用反射的效率也并不是很高.于是CGLIB就诞生了. 使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM字节码生成框架,使用字节码技术生成代理类,理论上比使用Java反射效率要高. 那么我们测试下,这个运行的效率如何. 1. 测试的准备情况 准备1:好记性不如烂笔头46-java拦截器-彻底理解动态代理的概念(1) http://blog.csdn.net/ffm83/article/details/