java - 如何在嵌入式tomcat中添加ServletContextListener

标签 java tomcat servlets tomcat8 servletcontextlistener

我有一个带有嵌入式 tomcat 的简单应用程序。我尝试做一些初始化工作,并且需要 JNDI 资源。

我尝试在 ServletContextListener.contextInitialized 中执行此操作。

当我在 tomcat.start() 之前添加 ServletContextListener 时,context.getServletContext() 返回 null

如果我在 tomcat.start() 之后执行此操作,则会收到错误:

Exception in thread "main" java.lang.IllegalStateException: Listeners cannot be added to context [] as the context has been initialised

这是启动器代码:

public static void main(String[] args) throws Exception {
    Tomcat server = new Tomcat();
    server.setPort(8080);

    Context context = server.addContext("", Paths.get(".").toAbsolutePath().toString());

    Tomcat.addServlet(context, "hello", new HelloServlet());
    context.addServletMappingDecoded("/", "hello");

    ContextResource resource = buildResource(
        H2_DATA_SOURCE_NAME,
        DataSource.class.getName(),
        h2DatasourceProperties()
    );

    context.getNamingResources().addResource(resource);
    context.getServletContext().addListener(DataBaseSchemaInit.class);

    server.start();
    server.getServer().await();
}

如何在嵌入式 tomcat v.8.5.28 中添加 ServletContextListener

最佳答案

我使用ServletContainerInitializer做到了。

StandardContext context = buildContext(tomcat);
...
context.addServletContainerInitializer(new DataBaseInitializer(DATA_BASE_SCHEMA), null);

关于java - 如何在嵌入式tomcat中添加ServletContextListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49195295/

相关文章:

spring - Tomcat 无法在 war 文件中找到 jsp

java - httpd和tomcat之间的通信安全吗?

Tomcat:从 JavaScript 调用时,Java Servlet 会响应奇怪的字符

java - 同一实例的同步块(synchronized block)和同步方法

java - 如何从命令行读取数组并使用JAVA中的通用方法显示它们?

java - 如何将 LWUIT 主题文件加载到我的 Java 项目中?

amazon-web-services - 如何调整云实例的大小?

java - 为什么更新 HttpServletResponse 需要这么长时间? ( Apache 汤姆猫)

jakarta-ee - 从 CDI 扩展访问 servlet 上下文参数

java - 如何查找具有相同列值的多行并将其添加到一行并设置为 vaadin 网格