3

我有一个关于在 Web 应用程序中处理异常的问题。我经常听说捕获超类 Exception 是个坏主意。

我经常编写代码来捕获 struts action / java servlet 类中的所有异常。

try {
     // call business facade
     // business facade calls DAO
     // any exception from DAO bubbles up 
} catch (Exception e) {
  log.error("error", e);
}

如果我们没有捕获超类异常。我们如何处理任何意外的运行时错误并适当地记录它们

4

4 回答 4

6

您可以为您的项目设置一个DefaultUncaughtExceptionHandler来处理未捕获的异常。例如,这是我在一个项目中的一段代码:

private static void setDefaultUncaughtExceptionHandler() {
    try {
        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {

            @Override
            public void uncaughtException(Thread t, Throwable e) {
                logger.error("Uncaught Exception detected in thread {}", t, e);
            }
        });
    } catch (SecurityException e) {
        logger.error("Could not set the Default Uncaught Exception Handler", e);
    }
}
于 2012-09-13T15:23:36.790 回答
2

在 Web 应用程序和您发布的代码片段中,您如何处理 root Exception?看起来你抓住了它,记录了它,然后继续前进。

在 webapp 中 99% 的情况下,最好允许异常冒泡到<error-page>web.xml 中的配置。

在我看来,如果您在“调用业务外观”时遇到未知错误,那么最好让您的应用程序继续处理其余的逻辑。

于 2012-09-13T15:35:47.360 回答
1

添加多个 catch 块并将 Exception catch 保留为最后一个。

try {
     // call business facade
     // business facade calls DAO
     // any exception from DAO bubbles up 
} catch(SuperClassException se)
{
//Do what you want to do when this exception happens.
}catch (Exception e) {
  log.error("error", e);
}
于 2012-09-13T15:23:21.307 回答
0

try 中的代码主要指定并标记您可以捕获的已检查异常。此外,查看 try 中的代码,您可以直观地了解失败案例的场景,因此可以添加未检查/运行时异常捕获块。

于 2015-06-09T05:58:55.747 回答