gpt4 book ai didi

java - 如何在 servlet 准备好服务后在 tomcat 中获取通知? (ServletContextListener 较早)

转载 作者:行者123 更新时间:2023-11-28 22:42:01 26 4
gpt4 key购买 nike

我想在 tomcat 加载 servlet 并准备好服务时在启动时收到通知。我想在此通知中对此 servlet 进行 http 调用。

我已经尝试将 ServletContextListener 添加到我的 web.xml,但是当我收到 contextInitialized 回调时,servlet 似乎没有完全加载,当我尝试使对它的 http 调用。

编辑:

如果我在 myServletContextListener 中进行 http 调用之前(在另一个线程上以免阻塞) hibernate 大约 20 秒。 contextInitialized() impl,它工作正常。所以我很确定我在 servlet 准备好调用之前就收到了事件。

public class StartupListener implements javax.servlet.ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {

Executors.newSingleThreadExecutor().execute(new Runnable() {
@Override
public void run() {
Thread.sleep(20000L);
Target target = ClientBuilder.newClient().target("http://localhost:8080/myapp");
target.path(endpoint).request().get(String.class);
}
});
}

@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {

}

最佳答案

没有可靠的方法可以确定 servlet 是否已准备好处理请求。来自 servlet (3.0) 规范的 §2.3.1:

The servlet container is responsible for loading and instantiating servlets. The loading and instantiation can occur when the container is started, or delayed until the container determines the servlet is needed to service a request.

ServletContextListener.contextInitialized(...) 方法在您的 Web 应用程序启动时被调用,并且与单个 servlet 的生命周期无关。

您可以在 servlet 的 init 方法末尾发布某种通知,以识别您的 servlet 几乎就绪。

或者,您可以通过编写 org.apache.catalina.core.StandardContextorg.apache.catalina.core.StandardWrapper 的扩展来实现您想要的效果>,但这超出了正常应用程序开发的范围。

关于java - 如何在 servlet 准备好服务后在 tomcat 中获取通知? (ServletContextListener 较早),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28336754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com