IMVC(InstantMVC簡稱)有幾個比較核心的接口,通過對這幾個接口的了解,可以更深入的了解IMVC到核心機制。
1.IAction接口
action是整個MVC的核心,如果了解struts或者webwork等MVC框架的朋友應(yīng)該
知道,action是一個用戶處理模塊,當(dāng)MVC容器接受到一個請求的時候,他會通過一定的方法獲得一個相應(yīng)的action類,然后執(zhí)行action類中
相應(yīng)的方法,最后返回一個視圖給客戶端,這就是最普通的mvc框架的流程。和其他框架的action類似,IMVC的action接口也有一個核心方法,
如下
public interface IAction {
/**
* 屬性介紹:驗證器,放入Map value 的key
*/
public static final String MVC_STATIC_validation="__validation";
/**
* 屬性介紹:文件上傳 Map value中的key
*/
public static final String MVC_STATIC_createUpload="__createUpload";
/**
* 屬性介紹:這是編輯器
*/
public static final String MVC_STATIC_editor="__editor";
/**
* 方法說明:action的核心方法
&
nbsp; * <
span style="color: #808080;">@param object 如果是post方法,object就
是該action對應(yīng)的form,如果是get方法并且配置get方法沒有form
* 那么這里就是null,如果配置get方法也是有form的,這里也是form
*
&
nbsp; * <
span style="color: #808080;">@param value 一個map,在
action中添加內(nèi)容到view都往這里添加
* @return
* String
*/
public View execute(Object object,Value value);
}
前
面三個變量這里暫時不說,我們來關(guān)注最后一個方法,execute,任何action都需要實現(xiàn)這個接口,同時也就是說必須在action中有這個方法。
這個方法有兩個傳入變量Object和Value,第一個是想要的formBean,如果是get方法并且沒有配置get方法設(shè)置form,那么這個時候
就是null,如果是非get方法,而且還傳入了參數(shù),那么IMVC會自動封裝相應(yīng)的form傳入到這個。第二個Value參數(shù),Value也是一個很核
心的接口。在IMVC中有ValueImpl類來實現(xiàn)。
Value 接口:
public interface Value {
public String getString(String key);
public String[] getArray(String key);
public void setObject(String key,Object value);
public Object getObject(String key);
}
ValueImpl 類:
public final class ValueImpl extends HashMap implements Map,Value,InstantValue{
//InstantValue
public void setArray(String key ,String[] arr){
super.put(key, arr);
}
//user Value
public String[] getArray(String key) {
return (String[])super.get(key);
}
public Object getObject(String key) {
return super.get(key);
}
public String getString(String key) {
Object o=super.get(key);
if(o==null){
return null;
}
if(o instanceof String[]){
return ((String[])o)[0];
}else{
return null;
}
}
public void setObject(String key, Object value) {
super.put(key, value);
}
//
以下實現(xiàn)clone。。提供性能
private ValueImpl cloneBase(){
ValueImpl vimpl=(ValueImpl) super.clone();
vimpl.clear();
return vimpl;
}
public static ValueImpl valueImpl=new ValueImpl();
public static ValueImpl cloneSelf(){
return valueImpl.cloneBase();
}
}
這個類也相當(dāng)簡單,我們看第一句:
public final class ValueImpl extends HashMap implements Map,Value,InstantValue
說
明這個類 繼承了HashMap,實現(xiàn)了Map,Value,InstantValue 三個接口。這三個接口其實就是三個權(quán)限版本,比如Value是用
戶操作權(quán)限,我們看到在action中傳入的是Value,但是在IMVC內(nèi)部操作的時候是把ValueImpl類轉(zhuǎn)換為InstantValue借口的
InstantValue 接口:
public interface InstantValue {
public void setArray(String key,String[] value);
}
這個幾口只有一個方法,這個方法是不會暴露給用戶的,是提供IMVC內(nèi)部設(shè)值用的。
下面還有一個攔截器接口
IInerceptor 攔截器接口:
public interface IInterceptor {
public void execute(HttpServletRequest request,HttpServletResponse response,Value value);
}
這個接口也相當(dāng)簡單,只有一個方法,傳入request和response參數(shù),同時還有一個Value參數(shù),這個Value上面已經(jīng)說過,是一個用戶操作的數(shù)據(jù)接口。
整個IMVC流程圖簡單來說如下:
首先,請求來了后,IMVC會創(chuàng)建一個ValueImp轉(zhuǎn)換為Value傳給前攔截器(如果沒有設(shè)
置就不用),攔截器操作完畢,在把這個ValueImp轉(zhuǎn)換為InstantValue接口傳給IMVC內(nèi)部操作,操作完畢接著把它轉(zhuǎn)化為Value接口
供用戶Action操作,最后執(zhí)行后攔截器,執(zhí)行完畢轉(zhuǎn)換為Map借口供模板引擎渲染試圖。
一個ValueImp要轉(zhuǎn)換為三種權(quán)限接口,所以他的實現(xiàn)就要implements 三個接口。
--InstantMVC:j2ee輕量級mvc框架