2012-09-13 66 views
2

我在處理web應用程序中的異常時有問題。我經常聽到捕捉超類異常是一個壞主意。Java異常處理 - 捕獲超類異常

我經常編寫代碼來捕獲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); 
} 

如果我們不捕獲超類異常。我們如何處理任何意外的運行時錯誤並對其進行適當的記錄

回答

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); 
    } 
} 
+0

如何使用舊版Java編寫的項目? – youcanlearnanything

+0

@optimus從1.5開始可用。對於舊版本,你必須找到另一種方式(1.4已經超過4年的EOL現在...)。 – assylias

+0

@assylias:與此處理程序相關的配置在哪裏去?任何示例寫作? – kosa

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); 
} 
2

在Web應用程序,並在代碼片斷你貼,你是如何處理的根Exception?它看起來像你抓住它,記錄下來,然後繼續前進。

在web應用程序中99%的情況下,最好允許Exception跳出到web.xml中配置的<error-page>

對於我來說,如果在「調用業務外觀」時發現未知錯誤,那麼最好讓您的應用程序繼續使用其餘的邏輯進行卡車運行似乎不太可能。

+0

如果冒泡到配置的它只隱藏用戶的堆棧跟蹤。對我們而言,我們有興趣通知用戶事務未完成並記錄異常 – youcanlearnanything

0

使用Struts,您可以配置一個exception handler來捕獲和處理從Action引發的任何異常。至少從Struts 1.2開始,這個功能就已經存在了。你的Action類不應該需要任何try-catch塊,除非你需要做某些事情來處理特定的異常。

0

try中的代碼主要指定並標記關於可以捕獲的已檢查的異常。另外,看看裏面的代碼嘗試你可以直觀的情況下失敗的情況下,相應的未經檢查的/運行時異常catch塊可以被添加。