Struts2中的错误处理

Omn*_*ent 2 java struts2

我对如何在Struts2中进行错误处理感到困惑.我希望制作一次中央页面,如果发生错误,用户将被定向.此外,当发生错误我希望记录它,因为我使用log4j我会记录它log.error(e.getMessage(), e);

但是,在我的动作类中,如果我发现错误(将所有代码放在try/catch中),则中心/常见错误页面不会出现.所以我决定不捕获错误,如果我没有发现错误,那么中央错误页面就出现了.但是现在如何将错误消息/ stacktrack放入日志?

阅读此链接后, 我执行了以下操作:

   <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>
Run Code Online (Sandbox Code Playgroud)

根据上面的配置,最初在reports.ReportSelection中引发错误(但我没有在那里捕获它)所以最后控件来到com.myErrorClass.我可以在这个类中记录错误,但我的问题是,日志消息是否仍然可用...因为它最初是在reports.ReportSelection中抛出的?

rad*_*ado 6

以下是记录操作引发的错误的方法.我不知道为什么默认情况下没有启用它.把它放在你的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"/>
Run Code Online (Sandbox Code Playgroud)

您不需要在每个操作方法周围都有try-catch块.