スーパーミニフレームEasyAction


仕事がなくて、卒業設計を思い出して、当初いくつかの卒業設計を変えたことを覚えています.Javaが開発した卒業設計の相当部分はStrutsのようなフレームワークを使用していますが、ほとんどの人はStrutsの相当部分のコア機能を使用しているだけです.の
だから勉強の過程で私はまた手を出す考えが芽生えて、実はMVCの下の表現層の枠組みの仕事の流れをよく考えてみると:
        1. 要求情報をブロックして分析する.
        2. リクエストのaction名を使用して、リクエストのパラメータを対応するJavaオブジェクト(StrutsのForm)に設定します.
        3. 要求されたaction名を用いて対応するActionクラスを実例化し、対応するメソッドを呼び出す.
        4. 戻り値で対応するパスを取得し、ジャンプを完了します.
そのため、コア機能は実現しにくくないはずです.主にJavaの反射メカニズムに基づいています.后でまた1篇の文章を见たことがあって、悪くなくて、しかし私はこの兄がすることを潔しとしないことをしたいです:更に1つの破れた車輪(木の車輪)を作りますほほほ~
        http://superleo.iteye.com/blog/227857
 
/*
 *  EasyAction      Servlet
 *  author KOKONOL
 *  version 0.00000001
 *  date 2008-08-29
 */

package EasyAction;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import EasyAction.config.EasyActionConfig;
import EasyAction.servlet.EasyActionServletContext;
import EasyAction.util.StringUtility;

/**
 * @author KOKONOL
 * @version 0.00000001
 * @date 2008-08-29
 * */
public class EasyActionServlet extends HttpServlet {

	/**   Class */
	private EasyActionConfig easyActionConfig;
	
	/**
	 * Constructor of the object.
	 */
	public EasyActionServlet() {
		super();
	}

	/**
	 * The doGet method of the servlet. 
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doPost(request, response);

	}

	/**
	 * The doPost method of the servlet. 
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		EasyActionServletContext.setRequest(request);
		EasyActionServletContext.setResponse(response);

		//  requestURL    Action     Form  
		String requestUrl = request.getRequestURL().toString();
		String actionName = requestUrl.substring(requestUrl.lastIndexOf("/") + 1, requestUrl.length()).replace(".do", "");
		
		// form  action    "NNN"   Action    "NNNAction" Form    "NNNForm"
		
		String actionClassName = easyActionConfig.getActionClassName(actionName);
		String formClassName = easyActionConfig.getFormClassName(actionName);
		
		// Action.execute   
		String resultStr = "";

		//         Form       
		Object formO = null;
		try {
			formO = this.setForm(formClassName, request.getParameterMap());
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		//     Action   ,    execute  ,     
		try {
			
			//   Action Class     
			Class actionClass = Class.forName(actionClassName);
			Object actionO = actionClass.newInstance();
			
			//    execute  Method  
			Method actionExecuteMethod = actionClass.getMethod("execute", formO.getClass());
			
			//   execute  
			resultStr = actionExecuteMethod.invoke(actionO, formO).toString();
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		String tgtURL = "";
		if(resultStr!=null && !"".equals(resultStr)){
			tgtURL = easyActionConfig.getForwardURL(actionName, resultStr);
		}
		request.getRequestDispatcher(tgtURL).forward(request, response);

	}

	/**
	 * Initialization of the servlet.
	 */
	public void init() throws ServletException {
		
		//  Servlet         EasyActionServletContext 
		EasyActionServletContext.setServletContext(this.getServletContext());
		
		//            
		String configPath = this.getServletContext().getRealPath("WEB-INF");
		
		try {
			//         
			easyActionConfig = new EasyActionConfig(configPath);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * Set request parameter values of request to FormObject.
	 */
	private Object setForm(String formClassName, Map<String,String[]> paramMap) throws ClassNotFoundException, InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {
		
		//       FormClass
		Class formClass = Class.forName(formClassName);
		Object formObject = formClass.newInstance();
		
		//                 
		if(paramMap == null || paramMap.size() == 0){
			return null;
		}
		
		//   FormClass     
		Method[] allMethod = formClass.getMethods();
		
		//   FormClass     
		Iterator<String> it = paramMap.keySet().iterator();
w:		while(it.hasNext()){
			
			//        
			String key = it.next();
			
			//           set   
			String methodName = "set"+StringUtility.toUpperCaseFirst(key);
			
			for(Method m:allMethod){
				if(m.getName().equals(methodName)){
					//        Form    set  
					String[] paramValue = paramMap.get(key);
					
					//    Set          
					Class paramType = m.getParameterTypes()[0];
					
					if(String[].class.equals(paramType)){
						//      String[]    
						Method method = formClass.getMethod(methodName, new Class[]{String[].class});
						method.invoke(formObject, new Object[]{paramValue});
						
					}else{
						//      String    
						Method method = formClass.getMethod(methodName, new Class[]{String.class});
						method.invoke(formObject, new Object[]{paramValue[0]});
						
					}
					continue w;
					
				}
			}
			
		}
		return formObject;
		
	}
	
}

コードはまだ完成していませんが、まだ多くのタスクがあります...例えばExceptionは処理されていません.
後で完全なコードをアップロードします... 
 
 
これは基礎の中の基礎の機能を実現しただけで、この点を書くことを通じて私は多くのものを学ぶ必要があることを発見して、次にdom 4 jを学んで、それからlog 4 jを学びます.私のこの破れた車輪が本当に走ることができます.