不,看起来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热插拔或部署开发功能可能无法在新的或已更改的侦听器上拾取。跟踪你的代码或做一些日志记录来验证。
您是否尝试抛出异常? –