繁体   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