是否可以使 Java Servlet 异常阻止应用程序启动



我有一个标记为load-on-startup的Java Servlet,并且已经实现了init()。作为init()逻辑的一部分,有一个对validate()的调用来确定事情是否有效。

我的问题是,如果validate()确定事情不正常,我想阻止应用程序启动作为需要修复某些问题的警报。我尝试抛出一个ServletException,虽然该信息通过管道传输到我的控制台,但我仍然能够在应用程序上发送流量,并且它做出了响应。

最后,我的双手与时机有些捆绑。我的 servlet 扩展了一个基类,该基类设置了我尝试验证的内容。

如果有解决方案,我需要它在Tomcat和WebLogic上运行。

正如上面Luiggi Mendoza所指出的,Web应用程序范围初始化的正确位置是在ServletContextListener中,而不是依赖于单个servlet的init方法。

当从侦听器的 contextInitialized 方法引发异常(运行时异常)时,Web 应用程序上下文将被销毁(至少在 Tomcat 6 中)。

最好的做法是将初始化逻辑移动到 ServletContextListener(您可以为每个 Web 应用程序定义多个侦听器,它们按照它们在 web.xml 中注册的顺序执行)。并且只在 servlet 中保留请求处理逻辑。

最新更新