簡體   English   中英

Struts2中的錯誤處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM