@WebListener注解简介说明

欢喜 Servlet 发布时间:2025-05-27 14:27:51 阅读数:5463 1

@Weblistener注解简介

`@WebListener`是Java Servlet 3.0引入一个标准注解(Annotation)
   用于声明一个类为Web应用的监听器(Listener)
   它可以监听Web应用的生命周期事件和HTTP会话、
     请求等状态变化
替代传统`web.xml`中 `<listener>`配置方式
  使开发者可以更简洁地定义监听逻辑

`@WebListener`注解主要功能

功能 描述
声明监听器类 标记某个类为监听器,自动注册到 Web 容器中
监听应用启动/关闭事件 如 `ServletContextListener`
监听会话创建/销毁事件 如 `HttpSessionListener`
监听请求开始/结束事件 如 `ServletRequestListener`
监听属性变更事件 如 `ServletContextAttributeListener`、`HttpSessionAttributeListener`

`@WebListener`注解定义(简化版)

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.Runtime)
public @interface WebListener {
    String value() default "";
}
 
- `value()`:可选描述信息,通常不使用

例 1:监听 Web 应用启动和关闭(`ServletContextListener`)

@WebListener
public class AppContextListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("Web 应用启动中...");
        ServletContext context = sce.getServletContext();
        context.setAttribute("appStartTime", System.currentTimeMillis());
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("Web 应用正在关闭...");
    }
}

例 2:监听用户会话创建与销毁(`HttpSessionListener`)

@WebListener
public class SessionCounterListener implements HttpSessionListener {

    private static int activeSessions = 0;

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        activeSessions++;
        System.out.println("新会话创建,当前在线人数:" + activeSessions);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        activeSessions--;
        System.out.println("会话销毁,当前在线人数:" + activeSessions);
    }
}

例 3:监听请求开始与结束(`ServletRequestListener`)

@WebListener
public class RequestLoggerListener implements ServletRequestListener {

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
        System.out.println("请求开始: " + request.getRequestURI());
    }

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
        System.out.println("请求结束: " + request.getRequestURI());
    }
}

例 4:监听会话属性变化(`HttpSessionAttributeListener`)

@WebListener
public class SessionAttributeListener implements HttpSessionAttributeListener {

    @Override
    public void attributeAdded(HttpSessionBindingEvent event) {
        System.out.println("会话属性添加: " + event.getName() + "=" + event.getValue());
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent event) {
        System.out.println("会话属性移除: " + event.getName());
    }

    @Override
    public void attributereplaced(HttpSessionBindingEvent event) {
        System.out.println("会话属性替换: " + event.getName());
    }
}

`@WebListener`注解与 `web.xml` 对比

使用`web.xml`传统写法

 
<listener>
    <listener-class>com.example.AppContextListener</listener-class>
</listener>
<listener>
    <listener-class>com.example.SessionCounterListener</listener-class>
</listener>

常见的监听器类型

监听器接口 功能描述
`ServletContextListener` 监听 Web 应用启动和关闭
`HttpSessionListener` 监听会话创建和销毁
`ServletRequestListener` 监听请求开始和结束
`ServletContextAttributeListener` 监听上下文属性添加、删除、替换
`HttpSessionAttributeListener` 监听会话属性变化
`HttpSessionActivationListener` 监听会话激活与钝化(分布式会话迁移)
`HttpSessionBindingListener` 监听对象绑定或解绑到会话的过程
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/Servlet/202505/314.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者