struts2全局異常處理及配合log4j異常日誌記錄

在編寫代碼時除了使用try catch來捕獲異常以外,還能夠用struts2的聲明式異常處理,即在Action中直接拋出異常交給struts2來處理,而且在xml文件中進行相應的配置,以下: java

<!--設置全局返回結果 -->
<global-results> 
       <result name="error">/webPage/exception/error.jsp</result>
       <result name="sql">/webPage/exception/sql_error.jsp</result>
</global-results>
<!--定義要捕獲的異常-->
<global-exception-mappings>  
        <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping> 
        <exception-mapping result="sql" exception="java.sql.SQLException"></exception-mapping> 
</global-exception-mappings>

以上是全局異常的處理,也能夠處理特定Action的異常,以下: web

<action name="login" class="userAction" method="login">
        <exception-mapping result="login" exception="com.exceptions.LoginException"></exception-mapping>
        <result name="login">/webPage/exception/login_error.jsp</result>
</action>

特定Action的異常聲明優先於全局異常。 sql

至於配合log4j記錄異常日誌是利用struts2中提供的異常攔截器ExceptionMappingInterceptor,當發生指定異常後,會由它處理,由於這個類有寫日誌的功能,默認是禁用的,所以直接將其啓用便可,以下: app

<interceptor-ref name="defaultStack">
        <!--覆蓋defultStack中的exception設置,啓用它的日誌功能-->
        <param name="exception.logEnabled">true</param> 
        <param name="exception.logLevel">error</param>
</interceptor-ref>
以上代碼能夠改爲:

<!--覆蓋defultStack中的exception設置,啓用它的日誌功能-->
<interceptor-ref name="exception">
       	<param name="exception.logEnabled">true</param> 
        <param name="exception.logLevel">error</param>
</interceptor-ref>
相關文章
相關標籤/搜索