package cn.com.css.common.interceptor;
import java.io.ioexception;
import java.sql.sqlexception;
import org.apache.commons.logging.log;
import org.apache.commons.logging.logfactory;
import org.springframework.dao.dataaccessexception;
import cn.com.css.common.exception.msipsysexception;
import cn.com.css.util.sysconstants;
import com.opensymphony.xwork2.actioninvocation;
import com.opensymphony.xwork2.interceptor.abstractinterceptor;
/**
* 此類是struts2的攔截器當發生錯誤時<br/>
* 由此類進行攔截并調用系統的異常處理類<br/>
* 生成頁面錯誤資訊和列印log日志<br/>
*
* @version 1.0
*/
@suppresswarnings("serial")
public class msipsysexceptioninterceptor extends abstractinterceptor {
//log4j執行個體名
private static final log errorlog = logfactory.getlog(sysconstants.log_error);
//構造方法
private msipsysexceptioninterceptor() {
}
//初始化realpath隻在伺服器啟動時執行一次
@override
public void init() {
//主攔截方法,攔截常用的錯誤異常,當有異常發生時進行捕捉并列印log日志和生成頁面的錯誤提示資訊
public string intercept(actioninvocation invocation) throws exception {
string method=invocation.getproxy().getmethod();
string namespace = invocation.getproxy().getnamespace().substring(invocation.getproxy().getnamespace().lastindexof("/")+1);
string result = "";
string mes = ""
+ "<br><br>namespace:" + invocation.getproxy().getnamespace()
+ "<br>action:" + invocation.getproxy().getaction()
+ "<br>method:" + invocation.getproxy().getmethod()
+ "<br><br>" + "具體的錯誤資訊為:";
try {
result = invocation.invoke();
} catch (dataaccessexception ex) {
this.logging(method, namespace, ex);
invocation.getinvocationcontext().put("invocationerror","資料庫操作失敗!" );
throw new msipsysexception(mes+ ex.getmessage());
} catch (nullpointerexception ex) {
invocation.getinvocationcontext().put("invocationerror","調用了未經初始化的對象或者是不存在的對象!" );
throw new msipsysexception(mes + ex.getmessage());
} catch (ioexception ex) {
invocation.getinvocationcontext().put("invocationerror","io異常!" );
} catch (classnotfoundexception ex) {
invocation.getinvocationcontext().put("invocationerror", "指定的類不存在!" );
} catch (arithmeticexception ex) {
invocation.getinvocationcontext().put("invocationerror", "數學運算異常!");
} catch (arrayindexoutofboundsexception ex) {
invocation.getinvocationcontext().put("invocationerror", "數組下标越界!" );
} catch (illegalargumentexception ex) {
invocation.getinvocationcontext().put("invocationerror", "方法的參數錯誤!");
} catch (classcastexception ex) {
invocation.getinvocationcontext().put("invocationerror","類型強制轉換錯誤!");
} catch (securityexception ex) {
invocation.getinvocationcontext().put("invocationerror","違背安全原則異常!");
} catch (sqlexception ex) {
invocation.getinvocationcontext().put("invocationerror","操作資料庫異常!" );
} catch (nosuchmethoderror ex) {
invocation.getinvocationcontext().put("invocationerror","方法末找到異常!" );
} catch (internalerror ex) {
invocation.getinvocationcontext().put("invocationerror","java虛拟機發生了内部錯誤" );
} catch (exception ex) {
invocation.getinvocationcontext().put("invocationerror","程式内部錯誤,操作失敗!" );
}
return result;
//列印log日志
private void logging(string method,string namespace,exception ex)
{
errorlog.debug("-------------------"+namespace+"送出的method="+method+"---------------\n");
errorlog.fatal("錯誤提示:"+ex.getmessage(),ex);
} catch (exception e) {
errorlog.debug("-------------------loggingmeg.xml檔案解析錯誤---------------\n");
private void logging(string method,string namespace,nosuchmethoderror ex)
private void logging(string method,string namespace,internalerror ex)
}