Java Web监听器

Java Web监听器:Servlet规范中定义的一种特殊类
用于监听ServletContext(application)、HttpSession(Session)、ServletRequest(request)等域对象的创建与销毁事件
用于监听域对象的属性发生修改的事件
可以在事件发生前、发生后做一些必要的处理

步骤:

  1. 创建一个实现监听器接口的类
  2. 配置web.xml进行注册(Servlet 2.5及以前版本,Servlet 3.0版本只需在类的上方添加注释@WebListener)

监听器的启动顺序:

    按优先级:监听器>过滤器>Servlet

    实现同一接口的监听器在按照web.xml配置顺序启动

分类:

按监听对象划分:(实现下列接口)

  • ServletContextListener:用于监听应用程序环境

            主要用途:定时器,获取应用程序初始化参数
    
public class MyServletContextListener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        System.out.println("contextDestroyed");
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("contextInitialized");
    }

}
  • HttpSessionListener:用于监听用户会话

            主要用途:统计在线人数,记录访问日志
    
public class MyHttpSessionListener implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("sessionCreated");
    }

    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("sessionDestroyed");
    }
}
  • ServletRequestListener:用于监听请求消息

            主要用途:读取请求参数,记录访问历史
    
public class MyServletRequestListener implements ServletRequestListener {

    public void requestDestroyed (ServletRequestEvent sre) {
        System.out.println("requestDestroyed");
    }

    public void requestInitialized (ServletRequestEvent sre) {
        System.out.println("requestInitialized");
    }
}

在web.xml中注册(web 2.5及以前版本):

<listener>
    <listener-class>listener.MyHttpSessionListener</listener-class>
</listener>
    <listener>
    <listener-class>listener.MyServletContextListener</listener-class>
</listener>
    <listener>
    <listener-class>listener.MyServletRequestListener</listener-class>
</listener>

按监听事件划分:(实现下列接口)

  • 监听域对象自身的创建和销毁的监听器(ServletContextListener、HttpSessionListener、ServletRequestListener)[同上]

  • 监听域对象中的属性的增加和删除的事件监听器(ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttributeListener)

    方法:attributeAdded、attributeRemoved、attributeReplaced
    
public class MyServletContextAttributeListener implements ServletContextAttributeListener {

    public void attributeAdded(ServletContextAttributeEvent scae) {

    }

    public void attributeRemoved(ServletContextAttributeEvent scae) {

    }

    public void attributeReplaced(ServletContextAttributeEvent scae) {

    }
}
  • 监听绑定到HttpSession域中的某个对象的状态的事件监听器[不需要在web.xml中注册]

    HttpSession中的对象状态:绑定-->解除绑定 钝化-->活化
    钝化:将不经常使用的session对象序列号保存到辅存上(服务器自动完成)
    活化:将保存在辅存(一般在服务器的文件系统,如:tomcat下的/work/catalina/hostname/application/SESSION.ser,或者数据库中)的Session对象重新加载到内存
    
    HttpSessionBindingListener:
                绑定:valueBound方法
                解除绑定:valueUnbound方法
    
    HttpSessionActivationListener:
                钝化:sessionWillPassivate方法[实现该方法的类必须实现序列化接口*Serializable*]
                活化:sessionDidActivate方法
    
public class User implements HttpSessionBindingListener, HttpSessionActivationListener, Serializable {

    private String username;
    private String password;

    public void valueBound(HttpSessionBindingEvent event) {
        System.out.println(event.getName());//打印session绑定对象的名称
    }

    public void valueUnbound(HttpSessionBindingEvent event) {
        System.out.println(event.getName());//打印session绑定对象的名称
    }
    public void sessionWillPassivate(HttpSessionEvent se) {//钝化
        System.out.println(se.getSource());
    }
    public void sessionDidActivate(HttpSessionEvent se) {//活化
        System.out.println(se.getSource());
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值