2010-06-23 71 views
3

我正在使用Struts2,我遇到了一個與它的錯誤處理機制有關的問題。 我想這樣做是讓堆棧跟蹤例外,以便用它的動作類裏 屬性(如對 控制檯打印)或JSP頁面內(不使用標籤庫)。Struts 2錯誤處理 - 如何獲取堆棧跟蹤和異常屬性?

婁還有就是我的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

我的設置與您的設置相同,除了將異常重定向到一個JSP頁面exception.jsp。

在該網頁我具備以下條件:

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

我知道你想避免標記庫,但也許是例外屬性將在你的行動提供?我記得無法將異常作爲異常對象傳遞給我的操作。我couuld只是把它作爲一個字符串(我的記憶是在這個模糊的,它已經有一段時間)

在我重定向到一個JSP頁面結束時,包括上述S:設置標籤和下面的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(); 

我記得得到這個工作,因此是那些情形之一的,我只好勉強一些凌亂的代碼,但它的工作...如果你想我們的東西更好,讓我知道

0

您可以使用com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor在期望的日誌級別(以及所需的日誌記錄器)上記錄您的異常。 (Read the documentation here

最簡單的方法是將定製defaultStack在你的struts.xml如下:

<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> 
1

在你的JSP:

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

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