JavaWeb 监听器

Listener

Listener简介

Listener中文名为监听器,是javaWeb的三大组件之一,Servlet,Filter,Listener。
监听器监听事件的发生,当事件发生时,触发相应的处理函数。

监听器可以监听什么

监听器监听以下三个对象

  • ServletRequest,请求对象
  • ServletContext,代表当前整个web应用。
  • HttpSession,session对象

监听器的种类

共有8个监听器,分为3大类。8个监听器都是接口。

  1. 生命周期监听器,监听三个对象的生命周期(创建到销毁)
    • ServletContextListener
    • ServletRequestListener
    • HttpSessionListener
  2. 属性监听器,监听三个对象中属性的增删改。
    当调用setAttribute()增 ,removeAttribute删,setAttribute改。
    • ServletContextAttributeListener
    • ServletRequestAttributeListener
    • HttpSessionAttributeListener
  3. session固有监听器
    • HttpSessionActivationListener 监听Session活化钝化
    • HttpSessionBindingListener 监听一个对象是否绑定到Session(保存在Session中)

监听器的使用方法

  1. 实现相应监听器的接口
public class RequestLifeListener implements ServletRequestListener{
    @Override
    public void requestDestroyed(ServletRequestEvent sre){
        //请求结束销毁
        //sre的作用
        //1.获取servletContext
        //2.获取servletRequest,获取当前的请求
        sre.getServletRequest();
    }
    @Override
    public void requestInitialized(ServletRequestEvent sre){
        //发送请求初始化
    }
}
  1. 在web.xml文件中配置
<listener>
    <!--全类名-->
    <listener-class>这里写全类名</listener-class>
</listener>

其他监听器的简单介绍

ServletContextListener

ServletContext应用启动创建,应用卸载销毁

public class ContextLifeListener implements ServletContextListener{
    @Override
    public void requestDestroyed(ServletContextEvent sre){
        //应用启动创建
    }
    @Override
    public void requestInitialized(ServletContextEvent sre){
        //应用卸载销毁
    }
}

HttpSessionListener

HttpSession新会话进来的时候创建对象,session失效的方法1. 强制失效,2 超时失效

public class SessionLifeListener implements HttpSessionListener{
    @Override
    public void sessionCreated(HttpSessionEvent se){
        //新会话进来的时候创建对象
    }
    @Override
    public void sessionDestroyed(HttpSessionEvent se){
        //session失效
    }
}

request域中属性变化

public class RequestAttributeListener implements ServletRequestAttributeListener{
    @Override
    public void attributeAdded(ServletRequestAttributeEvent srae){
        System.out.println("request域中增加属性");
        //增加的属性名
        String name = srae.getName();
        //增加的属性的值
        Object object = srae.getValue();
    }
    @Override
    public void attributeRemoved(ServletRequestAttributeEvent srae){
        //在request移除属性的时候调用此方法
        System.out.println("request域中移除属性");
    }
    @Override
    public void attributeReplaces(ServletRequestAttributeEvent srae){
        //在request替换属性的时候调用此方法。
        //srae中的getValue()获得旧值。
        //要获得新值可以通过rquest获得
        System.out.println("request域中替换属性");
    }
}

其他两种属性变换域request大体相同。

HttpSessionActivationListener

该监听器用于监听钝化和活化。可以监听Session中某个对象的钝化和活化。

//如果Session保存了Student对象,而我们要监听Student的钝化和活化,那么我们需要对Student做如下操作

public class Student implements HttpSessionActivationListener,Serializable{
    //序列号
    //属性,构造器,setter(),getter()方法。
    //下面是HttpSessionActivationListener接口的方法
    @Override
    public void sessionWillPassivate(HttpSessionEvent se){
        System.out.println("我和session一起钝化了");
        //se可以获得Session
    }
    @Override
    public void sessionDidActivate(HttpSessionEvent se){
        System.out.println("我和session一起活化了");
    }
}

HttpSessionBindingListener 监听一个对象是否保存在Session中

与上面的HttpSessionActivationListener使用方法基本相同。

//如果Session保存了Student对象,而我们要监听Student的钝化和活化,那么我们需要对Student做如下操作

public class Student implements HttpSessionBindingListener{

    @Override
    public void valueBound(HttpSessionBindindEvent event){
        System.out.println("对象绑定在Session中了");
    }
    @Override
    public void valueUnBound(HttpSessionBindindEvent event){
        System.out.println("对象从Session中解绑了");
        //Session失效也算解绑.
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值