天天看點

系統出錯時寫的的攔截器非常經典

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)

}

上一篇: ProxoolListener

繼續閱讀