Java Web 中的 Listener

本文详细介绍了JavaWeb中的监听器,包括如何配置监听器、监听器的分类以及各种监听器的作用。例如监听Session、context、request的创建与销毁,监听这些对象的属性变化等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Listener 用于监听 Java Web 程序中的事件。列如创建、修改、删除 Session、request、context等,并触发相应的事件。合理利用监听器,可以用很少的代码实现想要的效果。

监听器需要在部署的web 应用程序中配置,可以使用注解WebListener,或者通过 ServletContext 的 addListener 方法,也可以在配置文件web.xml 中通过listener来配置。

监听器的分类

这是总结了 Java EE8的Listener。

监听对象的创建与销毁

HttpSessionListener、ServletContextListener、ServletRequestListener 分别用于监控Session、context、request的创建与销毁。触发时机通过实现接口后观察需要实现的方法名称就能看出来。

监听对象的属性变化

用于监听Session、context、request 的属性变化,接口名称格式为 xxxAttributeListener,包括HttpSessionAttributeListener、ServletContextAttributeListener、ServletRequestAttributeListener。当向被监听对象中添加、更新、移除属性时,会分别执行xxxAdded()、xxxReplaced()、xxxRemoved() 方法。

监听Session 内的对象

有两种 Listener 监听 Session 内的对象,分别是 HttpSessionBindingListener 与 HttpSessionActivationListener。它们的触发时机分别为:

  • HttpSessionBindingListener: 当对象被放到 Session 里 执行 valueBound 方法;当对象被从 Session 里移除时执行 valueUnbound 方法,对象必须实现该 Listener 接口。
  • HttpSessionActivationListener: 服务器关闭时,会将 Session 里的内容 保存到硬盘上,这个过程叫做钝化。服务器重新启动时,会将 Session里的内容从硬盘上重新加载。当 Session 里的对象被钝化时会执行 sessionWillPassivate 方法,当对象被重新加载时执行 sessionDidActivate 方法,对象必须实现该接口。

另外还有一种监听器 HttpSessionIdListener,文档是这样解释的:Interface for receiving notification events about HttpSession id changes。也就是监听session id 的改变。可我实验了这代码并没有什么用。以下是我修改session id 的代码:

<% 
    String id = session.getId();
    //application.addListener(SessionIdChangeListener.class);

    session.invalidate();

    Cookie[] cookies = request.getCookies();
    Cookie cookie = null;
    for(Cookie c : cookies){
        if(c!=null)
            out.println(c.getName());
        if(c.getName().equals("JSESSIONID"))
            cookie = c;
    }
    cookie.setMaxAge(0);

    //response.addCookie(cookie);
    out.println(session.getId());
    %>

我想了下,虽然客户每次请求,服务器都会重新标识用户,也就是创建新的session,但在服务器端,此次请求段session 的id还是不变的。还有个原因,可能就是 Tomcat 并没有实现这个监听器的代码。这一段只是个人做的总结 ,在网上也没有查到相关资料,有清楚的还望能够指点一二。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值