我的webapp是部署到websphere服务器中的更大EAR的一部分。服务器在同一虚拟服务器上托管其他应用程序的数量。我的webapp在servletContextListener-> contextInitialized方法中进行了一些初始化/运行状况检查。如果初始化/运行状况检查失败,我想使webapp不可用。这样做的可行方法是什么?是否会在contextInitialized中抛出RuntimeException? EAR的其余部分是否仍然可用?谢谢。
答案 0 :(得分:7)
我建议从RuntimeException
投出ServletContextListener.contextInitialized
。
Servlet 2.3对此并不十分清楚,但Servlet 2.4增加了以下细节:
有些例外情况不会发生 调用堆栈中的另一个组件 应用。一个例子是a ... ServletContextListener 在a期间抛出未处理的异常 servlet上下文的通知 初始化…。在这种情况下, 开发者没有机会 处理异常。容器 可能会响应所有后续请求 使用HTTP访问Web应用程序 状态代码500表示一个 申请错误。
由于它表示servlet引擎“可能”禁止访问应用程序,因此您可能会发现服务器执行其他操作。但是,Tomcat和WebLogic都禁用了应用程序,我能想到的唯一合理的事情就是忽略该异常。我看不到一个非常受欢迎的容器 - 所以你最好自己在WebSphere中测试它。
答案 1 :(得分:0)
抛出RuntimeException可能只会使该servlet不可用。更安全的方法可能是实现类似Spring拦截器的东西,如果检查没有平移,它将转发到错误页面或其他东西。这样,您不需要阻止应用程序加载,但可以在运行时更优雅地处理它。