You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Grizzly WebappContext添加ServletContainerInitializer并触发onStartup?

正确添加ServletContainerInitializer到Grizzly WebappContext的方式

你之前用webContext.addListener(new MyInitializer())的方式不对,因为**ServletContainerInitializer并不是ServletContextListener**,Grizzly不会把它当作监听器来触发onStartup方法。

正确的做法是使用WebappContext专门提供的addServletContainerInitializer方法,这个方法是Grizzly为注册Servlet容器初始化器量身设计的。

代码示例

import java.util.Collections;
import org.glassfish.grizzly.http.server.WebappContext;

// 创建WebappContext实例
WebappContext webContext = new WebappContext("WebappContext", "");

// 添加你的ServletContainerInitializer
webContext.addServletContainerInitializer(new MyInitializer(), Collections.emptySet());

参数说明

第二个参数是Set<Class<?>>类型,用来指定这个初始化器要处理的类集合:

  • 如果你的MyInitializer类上使用了@HandlesTypes注解,这里可以传入注解中指定的类的集合;
  • 如果没有使用@HandlesTypes,直接传Collections.emptySet()即可,完全不影响初始化器的触发。

确认你的MyInitializer实现正确

确保你的类正确实现了ServletContainerInitializer接口的onStartup方法,比如:

import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import java.util.Set;

public class MyInitializer implements ServletContainerInitializer {
    @Override
    public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException {
        // 在这里编写你的初始化逻辑
        System.out.println("MyInitializer onStartup 方法已触发!");
    }
}

这样配置后,当Grizzly启动WebappContext时,就会正常调用MyInitializer的onStartup方法了。

内容的提问来源于stack exchange,提问作者user5182503

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:31:22