I have a question on handling exception in web application. Often I hear catching the super class Exception is a bad idea.
Often I write codes to catch all exceptions in struts action / java servlet classes.
try {
// call business facade
// business facade calls DAO
// any exception from DAO bubbles up
} catch (Exception e) {
log.error("error", e);
}
If we do not catch superclass Exception. How do we handle any unexpected runtime errors and logged them appropriately
解决方案
You can setup a DefaultUncaughtExceptionHandler for your project to deal with uncaught exceptions. For example, this is a piece of code that I have in one of my projects:
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);
}
}