在ServletContextListener中的异常时中止应用程序加载

时间:2014-12-02 03:31:55

标签: java-ee

ServletContextListener#contextInitialized

中的某些内容失败时,是否存在一种与容器无关的方法来中止应用程序加载过程

如果在该服务器上部署了多个应用程序,则不应影响其他应用程序。

为什么java ee没有指定标准方法呢?

2 个答案:

答案 0 :(得分:0)

您可以在侦听器中抛出未经检查的异常。来自规范:

  
    

在应用程序中另一个组件的调用堆栈下不会发生某些异常。一个例子是SessionListener,它接收会话超时并抛出未处理异常的通知,或者在servlet上下文初始化通知期间抛出未处理异常的 ServletContextListener,或者抛出一个ServletRequestListener的ServletContextListener。在初始化或销毁请求对象的通知期间未处理的异常。在这种情况下,开发人员没有机会处理异常

         

容器可以使用HTTP状态代码500响应对Web应用程序的所有后续请求,以指示应用程序错误。希望在侦听器生成异常后进行正常处理的开发人员必须自己处理通知方法中的例外。

  

这意味着,如果您从听众(或任何听众)那里扔出一个UnsupportedOperationException,您可以有效地阻止该应用程序投入使用。容器将始终使用HTTP-500(您可以映射错误页面)进行响应

答案 1 :(得分:-1)

在ServletContextListener中捕获异常,将它们设置为Context属性,并在Servlet.init()中抛出ServletException(如果存在)(在所有Servlet中)。