阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Listener

24次阅读
没有评论

共计 1666 个字符,预计需要花费 5 分钟才能阅读完成。

除了 Servlet 和 Filter 外,JavaEE 的 Servlet 规范还提供了第三种组件:Listener。

Listener 顾名思义就是监听器,有好几种 Listener,其中最常用的是 ServletContextListener,我们编写一个实现了ServletContextListener 接口的类如下:

@WebListener
public class AppListener implements ServletContextListener {// 在此初始化 WebApp, 例如打开数据库连接池等:
    public void contextInitialized(ServletContextEvent sce) {System.out.println("WebApp initialized.");
    }

    // 在此清理 WebApp, 例如关闭数据库连接池等:
    public void contextDestroyed(ServletContextEvent sce) {System.out.println("WebApp destroyed.");
    }
}

任何标注为 @WebListener,且实现了特定接口的类会被 Web 服务器自动初始化。上述AppListener 实现了 ServletContextListener 接口,它会在整个 Web 应用程序初始化完成后,以及 Web 应用程序关闭后获得回调通知。我们可以把初始化数据库连接池等工作放到 contextInitialized() 回调方法中,把清理资源的工作放到 contextDestroyed() 回调方法中,因为 Web 服务器保证在 contextInitialized() 执行后,才会接受用户的 HTTP 请求。

很多第三方 Web 框架都会通过一个 ServletContextListener 接口初始化自己。

除了 ServletContextListener 外,还有几种 Listener:

  • HttpSessionListener:监听 HttpSession 的创建和销毁事件;
  • ServletRequestListener:监听 ServletRequest 请求的创建和销毁事件;
  • ServletRequestAttributeListener:监听 ServletRequest 请求的属性变化事件(即调用 ServletRequest.setAttribute() 方法);
  • ServletContextAttributeListener:监听 ServletContext 的属性变化事件(即调用 ServletContext.setAttribute() 方法);

ServletContext

一个 Web 服务器可以运行一个或多个 WebApp,对于每个 WebApp,Web 服务器都会为其创建一个全局唯一的 ServletContext 实例,我们在 AppListener 里面编写的两个回调方法实际上对应的就是 ServletContext 实例的创建和销毁:

public void contextInitialized(ServletContextEvent sce) {System.out.println("WebApp initialized: ServletContext =" + sce.getServletContext());
}

ServletRequestHttpSession等很多对象也提供 getServletContext() 方法获取到同一个 ServletContext 实例。ServletContext实例最大的作用就是设置和共享全局信息。

此外,ServletContext还提供了动态添加 Servlet、Filter、Listener 等功能,它允许应用程序在运行期间动态添加一个组件,虽然这个功能不是很常用。

练习

使用 Listener 监听 WebApp。

下载练习

小结

通过 Listener 我们可以监听 Web 应用程序的生命周期,获取 HttpSession 等创建和销毁的事件;

ServletContext是一个 WebApp 运行期的全局唯一实例,可用于设置和共享配置信息。

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-08-05发表,共计1666字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中