在启动时中止java webapp

我的webapp是部署到websphere服务器中的更大EAR的一部分。 服务器托管同一虚拟服务器上的其他应用程序数。 我的webapp在servletContextListener-> contextInitialized方法中进行了一些初始化/运行状况检查。 如果初始化/运行状况检查失败,我想使webapp不可用。 这样做的可行方法是什么? 是否会在contextInitialized中抛出RuntimeException? EAR的其余部分是否仍然可用? 谢谢。

我建议从ServletContextListener.contextInitialized抛出一个RuntimeException

Servlet 2.3对此并不十分清楚,但Servlet 2.4增加了以下细节:

在应用程序中的另一个组件的调用堆栈下不会发生某些exception。 一个例子是… ServletContextListener在servlet上下文初始化通知期间抛出未处理的exception…. 在这种情况下,开发人员没有机会处理exception。 容器可以使用HTTP状态代码500响应对Web应用程序的所有后续请求,以指示应用程序错误。

由于它表示servlet引擎“可能”禁止访问应用程序,因此您可能会发现服务器执行其他操作。 但是,Tomcat和WebLogic都禁用了应用程序,我能想到的唯一合理的事情就是忽略该exception。 我看不到那个非常受欢迎的容器 – 所以你最好自己在WebSphere中测试它。

抛出RuntimeException可能只会使该servlet不可用。 一种更安全的方法可能是实现类似Spring拦截器的东西,如果检查没有完成,它将转发到错误页面。 这样,您不需要阻止应用程序加载,但可以在运行时更优雅地处理它。