[英]Error handling in Struts2
我對如何在Struts2中進行錯誤處理感到困惑。 我希望在發生錯誤時將用戶引導到一個中心頁面。 此外,當發生錯誤時,我希望將其記錄下來,因為我正在使用log4j,因此將其記錄為log.error(e.getMessage(), e);
但是,在動作類中,如果我捕獲到錯誤(將我的所有代碼放入try / catch中),則不會出現中央/常見錯誤頁面。 因此,我決定不捕獲錯誤,如果我沒有捕獲錯誤,則出現中心錯誤頁面。 但是現在我如何將錯誤消息/堆棧跟蹤放入日志?
閱讀此鏈接后,我進行了以下操作:
<global-results>
<result name="Exception" type="chain">
<param name="actionName">ErrorPage</param>
<param name="namespace">/error</param>
</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="Exception"/>
</global-exception-mappings>
<action name="selectionPage" class="reports.ReportSelection">
<result>/reports/SelectionPage.jsp</result>
</action>
</package>
<package name="secure" namespace="/error">
<action name="ErrorPage" class="com.myErrorClass">
<result>errorpage.jsp</result>
</action>
</package>
根據上述配置,錯誤最初是在report.ReportSelection中引發的(但我沒有在那兒捕捉到),因此最終控件進入了com.myErrorClass。 我可以記錄此類中的錯誤,但是我的問題是,該日志消息是否仍然可用...因為它最初是在報表中拋出的。ReportSelection?
這是記錄操作引發的錯誤的方法。 我不知道為什么默認情況下未啟用此功能。 將其放在您的struts.xml文件中。
<interceptors>
<interceptor-stack name="errorloggingStack">
<interceptor-ref name="defaultStack">
<param name="exception.logEnabled">true</param>
<param name="exception.logLevel">ERROR</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="errorloggingStack"/>
您無需在每個操作方法周圍都設置try-catch塊。
捕獲並記錄后,您是否要重新整理它? 如果這樣做,則應該啟動框架異常管理。您的錯誤處理代碼應類似於:
catch (Exception e) {
log.error(e.getMessage(), e);
throw e;
}
有了這個功能,您應該可以回到簡化的方法,即在操作類中記錄和重新編寫它,並配置單個全局錯誤頁面。
或者,您也可以“覆蓋” defaultStack攔截器堆棧
<interceptors>
<interceptor-stack name="defaultStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="exception">
<param name="logEnabled">true</param>
<param name="logLevel">WARN</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.