如何将 ServletContainerInitializer 添加到 Grizzly WebappContext?

How to add ServletContainerInitializer to Grizzly WebappContext?

我这样创建 Grizzly WebappContext:

WebappContext webContext = new WebappContext("WebappContext", "");

我有实现 ServletContainerInitializer 的 MyInitializer。如何将此初始化程序添加到 webContext?我这样试过:

webContext.addListener(new MyInitializer());

但是 MyInitializer.onStartup 方法从未被调用。怎么做?

ServletContainerInitializer 基于服务提供者接口 (SPI) 概念。 ServletContainerInitializer 接口的实现必须在 META-INF/services/javax.servlet.ServletContainerInitializer 文件中配置。 此 jar 包含一个侦听器,必须在 WEB-INF/lib 的一个 ServletContainer 中。

webContext.addListener 将满足您的需求,但给定的侦听器必须是以下一个或多个接口的实例:

- javax.servlet.ServletContextAttributeListener
- javax.servlet.ServletRequestListener
- javax.servlet.ServletRequestAttributeListener
- javax.servlet.http.HttpSessionListener
- javax.servlet.http.HttpSessionAttributeListener