スーパーミニフレームEasyAction
仕事がなくて、卒業設計を思い出して、当初いくつかの卒業設計を変えたことを覚えています.Javaが開発した卒業設計の相当部分はStrutsのようなフレームワークを使用していますが、ほとんどの人はStrutsの相当部分のコア機能を使用しているだけです.の
だから勉強の過程で私はまた手を出す考えが芽生えて、実はMVCの下の表現層の枠組みの仕事の流れをよく考えてみると:
1. 要求情報をブロックして分析する.
2. リクエストのaction名を使用して、リクエストのパラメータを対応するJavaオブジェクト(StrutsのForm)に設定します.
3. 要求されたaction名を用いて対応するActionクラスを実例化し、対応するメソッドを呼び出す.
4. 戻り値で対応するパスを取得し、ジャンプを完了します.
そのため、コア機能は実現しにくくないはずです.主にJavaの反射メカニズムに基づいています.后でまた1篇の文章を见たことがあって、悪くなくて、しかし私はこの兄がすることを潔しとしないことをしたいです:更に1つの破れた車輪(木の車輪)を作りますほほほ~
http://superleo.iteye.com/blog/227857
コードはまだ完成していませんが、まだ多くのタスクがあります...例えばExceptionは処理されていません.
後で完全なコードをアップロードします...
これは基礎の中の基礎の機能を実現しただけで、この点を書くことを通じて私は多くのものを学ぶ必要があることを発見して、次にdom 4 jを学んで、それからlog 4 jを学びます.私のこの破れた車輪が本当に走ることができます.
だから勉強の過程で私はまた手を出す考えが芽生えて、実は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を学びます.私のこの破れた車輪が本当に走ることができます.