2016-04-13 26 views
1

我已通过@WebListener注释在Java Servlet网络应用程序中实现了ServletContextListener。在我的contextInitialized方法中,我做了一些设置工作并验证预期的资源是否可用。停止从ServletContextListener方法contextInitialized启动Web应用程序

如果我确定在contextInitialized方法中出现问题,我该如何停止Web应用程序继续执行servlet?如果环境不适合(如没有数据库可用),那些servlet不应执行。

如何正常处理基于servlet的Web应用程序的错误环境?

+0

您是否尝试抛出异常? –

回答

2

不,看起来ServletContextListener界面是而不是旨在能够阻止启动的Web应用程序。

由于this Answer状态,在Servlet规范说遇到异常时,ServletContextListener可以某种程度上禁止访问的Web应用程序。该词may表示可选,不是必需的。该规范也没有明确规定停止访问Web应用程序的意义。

显然,在各种网络容器中实施的行为差异很大。有些什么都不做,有些登录并继续前进,有些则阻止部署Web应用程序。

我与Tomcat 8.0.33的经验...将throw new RuntimeException ("bogus stop servlet ");置于contextInitialized方法可防止应用程序被部署。在IDE报告中进行部署期间,控制台报告“FAIL - 在上下文路径处部署的应用程序/但上下文无法启动”。不幸的是,控制台和日志都没有捕获实际异常的报告。因此,如果您从一个或多个侦听器中抛出多个Exception,则调试将不明显。

正如Stack Overflow中的其他地方所提到的,最可靠的解决方案可能是让您的ServletContextListener标记成功或失败,标记变量存储在servlet会话中。然后让你的servlet代码检索并检查该标志。然后您的servlet代码将确定适当的操作过程。您的Web应用程序将被部署,但您自己的Servlet可能会选择不做任何事情并发送一些HTTP错误代码。

类似的问题:

备注:在添加或编辑您的ServletContextListener时,您可能需要对您的项目执行“清理并构建”操作。您的IDE热插拔或部署开发功能可能无法在新的或已更改的侦听器上拾取。跟踪你的代码或做一些日志记录来验证。

相关问题