- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经实现了 ServletContextListener
在 Java Servlet通过 @WebListener
的网络应用程序注解。在我的 contextInitialized
方法我做了一些设置工作并验证预期的资源是否可用。
如果我确定 contextInitialized
方法出现问题,如何阻止 Web 应用程序继续执行 servlet?如果环境不合适(例如没有可用的数据库),则不应执行这些 servlet。
如何优雅地处理基于 servlet 的 Web 应用程序的错误环境?
最佳答案
不,ServletContextListener
接口(interface)的设计并不是旨在阻止 Web 应用程序的启动。
如this Answer声明,Servlet 规范规定,当遇到异常时,ServletContextListener
可能以某种方式禁用对 Web 应用程序的访问。 may
这个词的意思是可选的,不是必需的。该规范也没有准确定义停止访问网络应用程序的含义。
显然,各种 Web 容器中的实现行为差异很大。有些不执行任何操作,有些记录并继续,有些则阻止部署 Web 应用程序。
我使用 Tomcat 8.0.33 的经验...在 contextInitialized
方法中放置 throw new RuntimeException ("bogus stop servlet ");
会阻止应用程序的部署。 IDE 报告中部署期间的控制台报告“FAIL - 已在上下文路径部署应用程序/但上下文无法启动”。不幸的是,该控制台和任何日志都没有捕获实际异常的报告。因此,如果您从一个或多个监听器抛出多个异常,则调试将不明显。
正如 Stack Overflow 中其他地方提到的,最可靠的解决方案可能是让您的 ServletContextListener 使用存储在 servlet session 中的标志变量来标记成功或失败。然后让您的 servlet 代码检索并检查该标志。然后,您的 servlet 代码将确定适当的操作过程。您的 Web 应用程序将被部署,但您自己的 servlet 可以选择不执行任何操作并发回一些 HTTP 错误代码。
类似问题:
旁注:添加或编辑 ServletContextListener
时,您可能需要对项目执行“清理并构建”操作。您的 IDE 的热插拔或开发时部署功能可能无法在新的或更改的监听器上使用。跟踪您的代码或进行一些日志记录以进行验证。
关于servlets - 停止从 `ServletContextListener` 方法 `contextInitialized` 启动 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36611392/
我使用 Eclipse Maven 插件创建一个 Java EE 7 项目。我的问题是,当我运行应用程序时,不会调用实现 SerlvetContextListener 的类。是什么导致了这个问题? @
我在 Web 应用程序启动阶段 (contextInitialized()) 读取了一个属性文件,并开始考虑如何使这些设置对 servlet“可见”。我是否需要循环遍历键并将每个键添加到上下文中,就像
有什么原因不能在 Java ServletContextListener 中创建变量并且它的值设置和获取与其他任何变量一样。我所拥有的是 SCL 中的 ArrayList 和另一个类中的方法经常使用
实际上,我需要执行一个方法,每次机器重启都需要几个小时才能完成。我已经在 apache tomcat 上部署了我的 Web 应用程序,并且启用了 Apache tomcat 的自动启动。为此,我在 S
我正在研究servlet,我从书中做了一个例子,但我得到了nullpointerexception。 这是我的类(class): package chala; public class Dog { p
我正在尝试在部署我的 war 文件时初始化一个流对象。 我编写了一个实现 ServletContextListener 的 Initializer 类,并向我的 web.xml 添加了一个监听器类标记
如果我有多个 ServletContextListener 并且其中一些在部署描述符中声明而其他带有注释 (@WebListener),如何定义由于应用程序初始化而执行的 ServletContext
我正在尝试使用 servletContainerInitializer 注册一个 servlet,但它似乎不起作用,也许这是我的代码(请查看它),但我开始想知道 ServletContainerIni
我正在阅读有关“Servlet 3.0 中的异步处理支持”的专家(?)教程(http://www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3.h
我有一个 ServletContextListener 来初始化我的数据库。我已将其添加到我的 web.xml 中: util.MySessionListener 当我启动服务器时,一切都很
我需要有一个可通过 JSP 应用程序中的应用程序使用的对象。该对象必须实例化一次,然后在应用程序的生命周期中应使用同一个实例。 我只是 jsp 的初学者,所以我看到了两种实现此目的的方法: 我有一个
ApplicationListener 和 ServletContextListener 有什么区别?你什么时候使用它们? implements ApplicationListener impleme
我已经使用 JAX-WS 开发了一个 Web 服务,并且在 web.xml 中我注册了这个 servlet 上下文监听器。 com.sun.xml.ws.transport.http.ser
我正在创建一个 war 文件 (progressReporter.war) 并将其部署在 Jetty7.2.2.v20101205 上。我在 contextInitialized 方法上有一个系统输出
我制作了基本的 Web 应用程序,其中我采用了一个扩展 TimerTask 的 POJO 类和一个实现 ServletContextListener 的 servlet 类。现在我关心的是我想在控制台
我有一个处理特定传入请求的 servlet。我们将其称为“UpdateUserStats”。我希望调用速度快,但我还需要请求来完成一项相当昂贵的任务。我认为,如果我让 UpdateUserStats
我们在重新加载上下文时遇到多个内存泄漏(在 catalina.out 中发现)。 为了清理这些线程,我创建了 ServletContextListener 的实现。 创建上下文时成功调用了 conte
我想运行一些简单的后台进程计算,但我似乎无法弄清楚。无论我做什么,它都会阻塞。 public class WorkThreadManagerContextLoaderListener implemen
我有一个 InitApp 类 @Component public class InitApp implements ServletContextListener { @Autowired Config
我知道什么是 ServletContextListener 以及如何在 web.xml 中实现/注册它。 但问题如下。在 Web 应用程序开始时,会为每个 javaVM 创建一个监听器实例。然后调用其
我是一名优秀的程序员,十分优秀!