我有一个标记为load-on-startup
并已实施init()
的Java Servlet。作为init()
逻辑的一部分,我们会调用validate()
来确定事情是否有效。
我的问题是,如果validate()
确定事情不合适,我想阻止应用启动,因为需要修复某些事情。我尝试抛出一个ServletException
,当管道信息输出到我的控制台时,我仍然能够在应用程序上发送流量并且它已做出响应。
最后,我的手与时间有点紧密相关。我的servlet扩展了一个基类,用于设置我正在尝试验证的内容。
如果有解决方案,我需要它在Tomcat和WebLogic上运行。
答案 0 :(得分:3)
正如上面的Luiggi Mendoza所指出的,Web应用程序范围初始化的正确位置是在ServletContextListener中,而不是依赖于单个servlet的init方法。
当从侦听器的contextInitialized方法抛出异常(运行时异常)时,Web应用程序上下文被破坏(至少在Tomcat 6中)。
您的最佳出价是将初始化逻辑移动到ServletContextListener(您可以为每个Web应用程序定义多个侦听器,并按照它们在web.xml中注册的顺序执行)。并且只在servlet中保留请求处理逻辑。