Jakarta ee ServletContextListener中出现异常时中止应用程序加载

Jakarta ee ServletContextListener中出现异常时中止应用程序加载,jakarta-ee,Jakarta Ee,当ServletContextListenercontextInitialized中出现故障时,是否有独立于容器的方法中止应用程序加载过程 如果该服务器上部署了多个应用程序,则不应影响其他应用程序 为什么JavaEE不指定一种标准的方法来实现这一点?您可以在侦听器中抛出一个未经检查的异常。根据规范: 某些异常不会发生在应用程序中另一个组件的调用堆栈下。例如,SessionListener接收会话超时并引发未处理异常的通知,或者ServletContextListener在servlet上下文初始

当ServletContextListenercontextInitialized中出现故障时,是否有独立于容器的方法中止应用程序加载过程

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


为什么JavaEE不指定一种标准的方法来实现这一点?

您可以在侦听器中抛出一个未经检查的异常。根据规范:

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

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


这意味着,如果您真的从您的侦听器或任何侦听器抛出一个不支持的操作异常,您可以有效地阻止应用程序投入服务。容器将始终使用HTTP-500进行响应,您可以将错误页映射到该HTTP-500,在ServletContextListener中捕获异常,将它们设置为上下文属性,并在Servlet.init中抛出ServletException(如果所有Servlet中都存在)