我有一个关于在Web应用程序中处理异常的问题。我经常听到抓住超类异常是一个坏主意。
我经常编写代码来捕获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);
}
如果我们没有捕获超类Exception。我们如何处理任何意外的运行时错误并将其妥善记录
答案 0 :(得分:6)
您可以setup a 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);
}
}
答案 1 :(得分:2)
在网络应用程序中,以及您发布的代码段中,您如何处理根Exception
?它看起来像你抓住它,记录它,继续前进。
在99%的webapp案例中,最好允许Exception冒泡到web.xml中配置的<error-page>
。
如果你在“调用业务外观”时发现一个未知错误,那么你似乎不太可能发现一个未知错误,那就是你的应用程序最好继续使用其余的逻辑进行卡车运输。
答案 2 :(得分: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);
}
答案 3 :(得分:0)
try里面的代码主要指定并标记可以捕获的已检查异常。此外,查看内部代码尝试您可以直接针对失败案例的情况,因此可以添加未经检查/运行时异常捕获块。