5

我的 webapp 是部署到 websphere 服务器中的更大 EAR 的一部分。服务器在同一虚拟服务器上托管许多其他应用程序。我的 webapp 在 servletContextListener->contextInitialized 方法中有一些初始化/健康检查。如果初始化/健康检查失败,我想让 webapp 不可用。这样做的可行方法是什么?从 contextInitialized 中抛出 RuntimeException 就足够了吗?EAR 的其余部分是否仍然可用?谢谢你。

4

2 回答 2

7

我建议扔一个RuntimeExceptionfrom ServletContextListener.contextInitialized

Servlet 2.3 对此不是很清楚,但 Servlet 2.4 添加了以下细节:

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

由于它说 servlet 引擎“可能”禁用对应用程序的访问,因此您可能会找到执行其他操作的服务器。但是,Tomcat 和 WebLogic 都禁用了该应用程序,而我能想到的唯一其他合理的事情就是忽略该异常。我看不出有这样的容器非常流行——所以您最好自己在 WebSphere 中测试它。

于 2008-11-07T17:03:01.437 回答
0

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

于 2008-11-07T15:34:24.270 回答