Java Struts2中的错误处理
我对如何在Struts2中处理错误有点困惑。我希望做一次中央页面,如果出现错误,用户将被引导到该页面。此外,当发生错误时,我希望将其记录下来,因为我使用的是log4j,所以将其记录为Java Struts2中的错误处理,java,struts2,Java,Struts2,我对如何在Struts2中处理错误有点困惑。我希望做一次中央页面,如果出现错误,用户将被引导到该页面。此外,当发生错误时,我希望将其记录下来,因为我使用的是log4j,所以将其记录为log.error(e.getMessage(),e) 但是,在action类中,如果捕获到错误(将所有代码放在try/catch中),则不会出现中心/公共错误页面。所以我决定不捕捉错误,如果我没有捕捉到错误,那么中央错误页面就会出现。但是现在如何将错误消息/stacktrack放入日志中 看完这个 我做了以下工作:
log.error(e.getMessage(),e)代码>
但是,在action类中,如果捕获到错误(将所有代码放在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>
错误页
/错误
/reports/SelectionPage.jsp
errorpage.jsp
根据上面的配置,最初错误是在reports.ReportSelection中抛出的(但我没有在那里捕捉到它),因此最后控制权转到com.myErrorClass。我可以在此类中记录错误,但我的问题是,日志消息是否仍然可用…因为它最初是在reports.ReportSelection中抛出的?捕获并记录后,是否重新发送它?如果您这样做了,那么框架异常管理就应该开始了。您的错误处理代码应该如下所示:
catch (Exception e) {
log.error(e.getMessage(), e);
throw e;
}
有了它,您应该能够回到您的简化方法,即在action类中记录并重新发送它,并配置单个全局错误页面。下面是如何记录操作引发的错误。我不知道为什么默认情况下没有打开。将其放入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块。另外,您还可以“覆盖”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>
真的
警告