Struts1.Xパーソナライズ異常学習


1.独自のパーソナライズされた例外クラスを作成します.このクラスには、メンバー変数errorCodeを含めることができる.propertiesプレースホルダのargs配列を埋め込む必要があるObject配列タイプメンバー変数.彼らのget()メソッドを定義します.4つのコンストラクション関数を定義します.1つ目のコンストラクション関数は空、2つ目のコンストラクション関数はerrorCode、Object配列を持つコンストラクションメソッド、3つ目はerrorCodeパラメータを持つコンストラクションメソッド、4つ目はerrorCodeパラメータを持つコンストラクションメソッド、1つのObjectタイプパラメータ(非配列)を持つコンストラクションメソッドです.後者の2つの構築方法の実装では、2番目の宣言された構築方法を直接呼び出すことができる.
 
ErrorCodeExceptionクラス:
package wiki.struts;  
public class ErrorCodeException extends RuntimeException {
	
	//define the error code,
	//it is related to the properties file.
	private String errorCode;
	
	//if you want to dynamic fill with the args,use it object array.
	private Object[] args;
	
	public ErrorCodeException(){}
	
	//if not need to fill with the args in the properties.
	public ErrorCodeException(String errorCode){
		this(errorCode,null);
	}
	
	//if you want to fill with the args in the properties.
	public ErrorCodeException(String errorCode,Object args0){
		this(errorCode,new Object[]{args0});
	}
	
	
	public ErrorCodeException(String errorCode,Object[] args){
		this.errorCode = errorCode;
		this.args = args;
	}
	
	public String getErrorCode() {
		return errorCode;
	}
	
	public Object[] getArgs() {
		return args;
	}
}
  
 
2.対応するExceptionHandlerクラスを作成し、既存のExceptionHandlerから継承する.execute()メソッドを書き換えます.
 
ErrorCodeExceptionHandlerクラス:
package wiki.struts;  import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.Globals; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ExceptionHandler; import org.apache.struts.config.ExceptionConfig; import org.apache.struts.util.ModuleException; public class ErrorCodeExceptionHandler extends ExceptionHandler {         public ActionForward execute(             Exception ex,             ExceptionConfig ae,             ActionMapping mapping,             ActionForm formInstance,             HttpServletRequest request,             HttpServletResponse response)             throws ServletException {             if(!(ex instanceof ErrorCodeException)){                 return super.execute(ex, ae, mapping, formInstance, request, response);             }                         ActionForward forward = null;             ActionMessage error = null;             String property = null;            //Build the forward from the exception mapping if it exists            //or from the form input             if (ae.getPath() != null) {                 forward = new ActionForward(ae.getPath());             } else {                 forward = mapping.getInputForward();             }            //Figure out the error             if (ex instanceof ModuleException) {                 error = ((ModuleException) ex).getActionMessage();                 property = ((ModuleException) ex).getProperty();             } else {                //deal with the exception,if the instance of                //exception is ErrorCodeException.                 ErrorCodeException ece = (ErrorCodeException)ex;                 error = new ActionMessage(ece.getErrorCode(), ece.getArgs());                 property = error.getKey();             }             this.logException(ex);            //Store the exception             request.setAttribute(Globals.EXCEPTION_KEY, ex);             this.storeException(request, property, error, forward, ae.getScope());             return forward;         } } 3.struts-configを構成する.xmlのkey値は任意に指定でき、typeは独自のパーソナライズされた例外クラス、handlerは2で記述されたExceptionHandlerクラスである.
<exception key="error.exception"
			type="wiki.struts.ErrorCodeException"
			handler="wiki.struts.ErrorCodeExceptionHandler"


			path="/login_error.jsp"
			/>