我正在使用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>
提前致谢!
答案 0 :(得分:1)
:
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>