Struts 2错误处理 - 如何获取stackTrace和exception属性?

时间:2010-06-23 22:42:38

标签: java java-ee struts2

我正在使用Struts2,我遇到了错误处理机制的问题。 我想做的是获得 stackTrace 异常 属性,以便在动作类中使用它(就像打印一样) 控制台)或JSP页面内部(不使用taglib)。

Bellow有一段我的struts.xml文件:

<default-interceptor-ref name="defaultStack"/>

    <global-results>
        <result name="Exception" type="redirect">/error.action</result>
    </global-results>

    <global-exception-mappings>
        <exception-mapping result="Exception"   exception="java.lang.Exception" />
    </global-exception-mappings>

    <action name="error" class="fend.ErrorAction">
        <result>/error.jsp</result>
        <interceptor-ref name="configStack"/>
    </action>

提前致谢!

3 个答案:

答案 0 :(得分:1)

JSP中的

Exception : <s:property value="%{exception}" />

Exception stacktrace: <s:property value="exceptionStack"/>

答案 1 :(得分:0)

除了将异常重定向到JSP页面exception.jsp之外,我的设置与您相同。

在该页面中,我有以下内容:

 <s:set name="ex" value="%{exception}" scope="page"/>

我知道您要避免使用标记库,但是您的操作中可能会提供异常属性吗?我记得在将异常作为异常对象传递给我的操作时遇到了麻烦。我只是把它作为一个字符串传递(我的记忆模糊不清,已经有一段时间了)

最后我重定向到JSP页面,包括上面的s:set标签和以下JSP sciptlet:

<%
Exception exMsg = (Exception)pageContext.getAttribute("ex");
logger.logException(application.getRealPath("")+ "/WEB-INF/error.txt",exMsg);
%>

<br/><br/>User friendly message here

logger类从Exception类获取堆栈跟踪并将其记录到文件中:

StackTraceElement[] stackTrace = exception.getStackTrace();

我记得我必须完成这项工作,所以这是我必须解决一些凌乱的代码但其工作的情况之一...如果你想办法让我知道更多

答案 2 :(得分:0)

您可以使用 com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor 将异常记录到所需的日志级别(以及所需的记录器)。 (Read the documentation here

最简单的方法是在struts.xml中自定义 defaultStack ,如下所示:

<interceptor-stack name="defaultStack">
  <interceptor-ref name="exception">
     <param name="logEnabled">true</param>
     <param name="logCategory">com.mycompany.app.unhandled</param>
     <param name="logLevel">WARN</param>
  </interceptor-ref>
  <interceptor-ref name="alias"/>
  <interceptor-ref name="servletConfig"/>
  ........
</interceptor-stack>