Servlets 停止从`ServletContextListener`方法`contextInitialized启动web应用程序`
我已经通过注释在web应用程序中实现了一个。在我的方法中,我做了一些设置工作,并验证预期的资源是否可用 如果我在Servlets 停止从`ServletContextListener`方法`contextInitialized启动web应用程序`,servlets,production-environment,java-ee-7,Servlets,Production Environment,Java Ee 7,我已经通过注释在web应用程序中实现了一个。在我的方法中,我做了一些设置工作,并验证预期的资源是否可用 如果我在contextInitialized方法中确定出了问题,那么如何阻止web应用继续执行servlet?如果环境不合适(例如没有可用的数据库),则不应执行这些servlet 如何优雅地处理基于servlet的web应用程序的故障环境?否,ServletContextListener界面的设计目的似乎不是为了阻止web应用程序的启动 如前所述,Servlet规范指出,当遇到异常时,Serv
contextInitialized
方法中确定出了问题,那么如何阻止web应用继续执行servlet?如果环境不合适(例如没有可用的数据库),则不应执行这些servlet
如何优雅地处理基于servlet的web应用程序的故障环境?否,
ServletContextListener
界面的设计目的似乎不是为了阻止web应用程序的启动
如前所述,Servlet规范指出,当遇到异常时,ServletContextListener
可能会以某种方式禁用对web应用的访问。“代码”这个词可以是可选的,而不是必需的。该规范也没有确切定义停止访问web应用程序意味着什么
显然,各种web容器中的实现行为差异很大。有些人什么也不做,有些人记录并继续,有些人阻止部署web应用程序
我使用Tomcat 8.0.33的经验…放入抛出新的RuntimeException(“伪停止servlet”)contextInitialized
方法中的code>阻止部署应用程序。IDE报告中部署期间的控制台报告“失败-在上下文路径部署的应用程序/但上下文启动失败”。不幸的是,该控制台和所有日志都没有捕获实际异常的报告。因此,如果您从一个或多个侦听器中抛出多个异常,调试将不明显
正如Stack Overflow中其他地方提到的,最可靠的解决方案可能是让您的ServletContextListener
使用存储在servlet会话中的标志变量标记成功或失败。然后让servlet代码检索并检查该标志。然后,servlet代码将确定适当的操作过程。您的web应用程序将被部署,但您自己的servlet可以选择不执行任何操作并返回一些HTTP错误代码
类似问题:
旁注:添加或编辑ServletContextListener
时,您可能需要对项目执行“清理并生成”操作。开发功能时IDE的热插拔或部署可能无法在新的或更改的侦听器上进行。跟踪代码或进行一些日志记录以验证。是否尝试引发异常?