在 ServletContextListener 中处理 Java 异常的首选方法

2022-09-02 04:37:54

对于 servlet 生命周期的东西,你们建议做些什么来响应异常...

例如

public class Foo implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent event) {
        try {
           // something nasty
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        try {
           // something nasty
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

我不完全确定如何处理上面的运行时异常。我的想法是,如果在这里抛出异常,它们会严重到足以完全破坏系统,因此(未处理的)运行时异常可能是可以的。

我想我在问什么处理来自servlet上下文侦听器的未经检查的异常?


答案 1

捕获异常时,可能需要考虑设置属性以指示遇到错误。这样,如果容器尚未禁用应用,则可以让 s 和/或 s 检查属性并采取适当的操作,例如显示错误页。ServletContextFilterServletServletContext


答案 2

似乎ServletContentListener并不是为了能够控制生命周期而设计的(否则它将被允许抛出ServletException)。

因此,我不会依赖 RuntimeException 来做任何有用的事情。看看这里的其他一些线程,它似乎在某些应用程序服务器上被记录和忽略。

如果应用程序在代码失败时不启动至关重要,则应将该代码移动到 Servlet 的初始化部分。


推荐