gpt4 book ai didi

tomcat - 如何从 Servlet 中以编程方式检测 Tomcat 启动?

转载 作者:行者123 更新时间:2023-11-28 23:13:36 25 4
gpt4 key购买 nike

问题

如何以编程方式确定 Tomcat 何时完成启动?我的意思是在 Tomcat 上运行的 WAR 文件中以编程方式进行,很可能是通过一个 Servlet,如果可能的话,它可以利用容器信息?

背景

您通常在 WAR 完全部署后看到的 Catalina 日志条目与我正在查找的内容相同。我有一个约束,使解析日志变得不受欢迎。但转到 Catalina.out 的数据正是我要找的。我正在尝试找到一种方法,使 servlet 之上的一层甚至更高,以获取有关启动时间的容器状态,但如果可能的话,我愿意接受其他方法。

我尝试过的

我尝试检测 servlet 初始化,但那是特定于 WAR 内部的组件,而不是 servlet 容器本身。我也尝试过 Spring Events 但它们提供的最高级别是“应用程序上下文”,它仅表示一组 Spring Beans 已完成加载,甚至不一定是所有 Spring bean ...如果有更接近 Servlet 规范或 Tomcat 的解决方案将不胜感激的特定图书馆。

最佳答案

Servlet 只有在 Tomcat 完全完成启动时才会执行,并且正在运行并处理请求。所以,抱歉,这个问题没有意义。 (这就像您无法如实回答“您醒着吗?”这个问题一样。)

在 Tomcat 启动完成之前运行的所有 Web 应用程序都是您实现和注册(在 server.xml 中)的任何 ServletContextListener。当 Tomcat 启动应用程序时,它会调用任何已注册的 ServletContextListener 的 contextInitialized() 方法。

如果您希望围绕 Tomcat 生命周期执行一些代码,您可以使用 Tomcat 的 org.apache.catalina.LifecycleListener 接口(interface)。在自己的类中实现它,并在服务、引擎或主机的 server.xml 中注册该类。这样的类不会驻留在您的 webapp 中,而是部署在 Tomcat 的 lib 目录中(类似的东西;检查您的 Tomcat 版本)。

从概念上讲,一个 Web 应用程序永远不会知道同一个 Servlet 容器(即 Tomcat)中的任何其他 Web 应用程序;这是规范严格禁止的。没有任何方法可以连接两个应用程序。在 Tomcat 中,“特权”应用程序除外,例如 Tomcat Manager。如果您将一个应用程序定义为特权应用程序,它确实有一定的方式来处理其他网络应用程序。

关于tomcat - 如何从 Servlet 中以编程方式检测 Tomcat 启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53656052/

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