我有一个简单的 Jetty 服务器,它从web.xml
运行一个 Web 应用程序。该文件有一些 servlet 和一个ServletContextListener
。当一切正常时,这完美地工作,包括在退出时优雅地关闭。
但是,如果启动该 Web 应用程序由于某种原因失败,我希望服务器仍然正常关闭。这包括调用相关ServletContextListeners
的contextDestroyed
方法。
WebAppContext context = ...;
Server server = ...;
server.start();
if (!context.isAvailable()) {
// startup failed
server.stop(); // I would expect this to call contextDestroyed
}
如何让 Jetty 自行正确清理?
如果这很重要,当在Tomcat中运行与war
相同的Web应用程序时,它可以正常工作,并且实际上在失败的启动时正确关闭。
你没有说你正在运行哪个版本的Jetty。我已经检查了最新版本的 jetty,行为符合预期:如果 servlet 无法正确初始化,则 Web 应用程序被标记为不可用,当调用 server.stop(( 时,将调用 contextDestroy 侦听器方法。您能否提供更多详细信息,例如码头版本、日志输出、Web 应用程序启动失败的时间点等。