亚洲欧洲校园自拍都市,91精品国产亚洲爽啪在线影院 ,亚洲国产一区二区三区青草影视http://m.tkk7.com/kingyaoo/category/32026.html設(shè)計(jì)java,設(shè)計(jì)人生zh-cnThu, 12 Jun 2008 14:11:32 GMTThu, 12 Jun 2008 14:11:32 GMT60IMVC框架特性詳解--ajax支持http://m.tkk7.com/kingyaoo/archive/2008/06/11/207185.html剎那剎那Wed, 11 Jun 2008 11:14:00 GMThttp://m.tkk7.com/kingyaoo/archive/2008/06/11/207185.htmlhttp://m.tkk7.com/kingyaoo/comments/207185.htmlhttp://m.tkk7.com/kingyaoo/archive/2008/06/11/207185.html#Feedback0http://m.tkk7.com/kingyaoo/comments/commentRss/207185.htmlhttp://m.tkk7.com/kingyaoo/services/trackbacks/207185.html
    一 ajax View類型支持。Imvc的視同是通過(guò)一個(gè)View類來(lái)返回的,在action中通過(guò)return new View("/xxx.html")返回一個(gè)視圖,然后IMVC會(huì)通過(guò)Value中的數(shù)據(jù)渲染這個(gè)視圖。這是一般的流程,有些特殊的流程可以返回其他類型的View,我們先來(lái)看看View類的代碼:
public final class View implements Cloneable{
    
/**
     * 屬性介紹:普通的view,通過(guò)模板轉(zhuǎn)換
     
*/
    
public static final int TYPE_VIEW=1;
    
/**
     * 屬性介紹:轉(zhuǎn)向,不改變url
     
*/
    
public static final int TYPE_REDIRECT=2;
    
/**
     * 屬性介紹:專心 ,改變url
     
*/
    
public static final int TYPE_REDIRECT2=3;
    
/**
     * 屬性介紹:直接返回string,path的值
     
*/
    
public static final int TYPE_AJAX=4;
    
    
public static final int TYPE_EXCEPTION=5;

    
private String path;
    
private int type=1;
    
public View(String path){
        
this.path=path;
    }
    
public View(String path,int type){
        
this.path=path;
        
this.type=type;
    }
    
public View(Map map){
        JSONObject jsono
=JSONObject.fromObject(map);
        path
=jsono.toString();
        type
=TYPE_AJAX;
    }
    
public View(List array){
        JSONArray jsona
=JSONArray.fromObject(array);
        path
=jsona.toString();
        type
=TYPE_AJAX;
    }
    
public View(Object bean){
        JSONObject jsono
=JSONObject.fromObject(bean);
        path
=jsono.toString();
        type
=TYPE_AJAX;
    }
    
public String getPath() {
        
return path;
    }
    
public void setPath(String path) {
        
this.path = path;
    }
    
public int getType() {
        
return type;
    }
    
public void setType(int type) {
        
this.type = type;
    }

    
public View clone(String path){
        View v
=cloneBase();
        v.path
=path;
        
return v;
    }
    
public View clone(String path,int type){
        View v
=cloneBase();
        v.path
=path;
        v.type
=type;
        
return v;
    }
    
public View clone(Map map){
        View v
=cloneBase();
        JSONObject jsono
=JSONObject.fromObject(map);
        v.path
=jsono.toString();
        v.type
=TYPE_AJAX;
        
return v;
    }
    
public View clone(List array){
        View v
=cloneBase();
        JSONArray jsona
=JSONArray.fromObject(array);
        v.path
=jsona.toString();
        v.type
=TYPE_AJAX;
        
return v;
    }
    
public View clone(Object bean){
        View v
=cloneBase();
        JSONObject jsono
=JSONObject.fromObject(bean);
        v.path
=jsono.toString();
        v.type
=TYPE_AJAX;
        
return v;
    }
    
private View cloneBase(){
        View v
=null;
        
try {
            v 
= (View) super.clone();
        } 
catch (CloneNotSupportedException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }
        
return v;
    }
}
我們主要關(guān)注以下幾個(gè)變量:
 /**
     * 屬性介紹:普通的view,通過(guò)模板轉(zhuǎn)換
     
*/
    
public static final int TYPE_VIEW=1;
    
/**
     * 屬性介紹:轉(zhuǎn)向,不改變url
     
*/
    
public static final int TYPE_REDIRECT=2;
    
/**
     * 屬性介紹:專心 ,改變url
     
*/
    
public static final int TYPE_REDIRECT2=3;
    
/**
     * 屬性介紹:直接返回string,path的值
     
*/
    
public static final int TYPE_AJAX=4;
    
public static final int TYPE_EXCEPTION=5;
    第一個(gè)是普通的View,通過(guò)ViewFactory.getView("/tt.html")這個(gè)方法返回的是普通的view,也就是可以通過(guò)IMVC渲染的視圖,而
TYPE_REDIRECT則是返回一個(gè)跳轉(zhuǎn)view,可以跳轉(zhuǎn)到下一個(gè)action,TYPE_REDIRECT2也是一個(gè)跳轉(zhuǎn)view,不過(guò)是改變URL地址的view。TYPE_AJAX就是ajax試圖了,也是今天要講的主角了,至于最后一個(gè)TYPE_EXCEPTION,是把異常返回到客戶端瀏覽器到view,這里暫時(shí)不考慮。我們可以通過(guò)這樣一個(gè)構(gòu)造函數(shù)創(chuàng)造出ajax試圖,比如new  View("這是ajax信息",View.TYPE_AJAX),或者通過(guò)ViewFactory.getView("這是ajax信息",View.TYPE_AJAX)也是一樣,不過(guò)用factory創(chuàng)建的對(duì)象是通過(guò)對(duì)象的clone創(chuàng)建的,能節(jié)省一定的性能開銷。當(dāng)返回的是一個(gè)ajax View的時(shí)候,信息就會(huì)直接返回,而不是通過(guò)渲染試圖,比如上面的就直接返回“這是ajax信息”給客戶端,如果這個(gè)action是由客戶端ajax請(qǐng)求的話,直接返回?cái)?shù)據(jù),是不是很方便呢?

    接下來(lái)的ajx特性也許會(huì)讓你覺(jué)得更方便,比如以下代碼:

....action前面的內(nèi)如.....
    User u
=new User();
    u.setAge(
1);
    u.setName(
"汪汪汪");
    return ViewFactory.getView(u);
    這樣的返回會(huì)直接在客戶端打印出 {"age":1,"name":"汪汪汪"};也就是IMVC把對(duì)象映射成立JSON(一種js對(duì)象的String形式),這個(gè)返回?cái)?shù)據(jù)在客戶端直接可以調(diào)用,比如data.name就直接調(diào)用出“汪汪汪”,是不是很方便?而且IMVC還支持把List,數(shù)組,Map,還有對(duì)象相互無(wú)限級(jí)嵌套返回成JSON數(shù)據(jù),這將大大增加AJAX開發(fā)的敏捷性和清晰性。

    二 ajax Chain支持。我們假設(shè)有一個(gè)全部ajax的網(wǎng)頁(yè),里面有幾個(gè)div中的數(shù)據(jù)都是通過(guò)ajax的方式向服務(wù)器請(qǐng)求的,那么每個(gè)div都會(huì)請(qǐng)求一次ajax action,這樣就導(dǎo)致了請(qǐng)求次數(shù)頻繁,資源的浪費(fèi),IMVC提供了一種ajaxChain的概念,可以通過(guò)一個(gè)url請(qǐng)求多個(gè)action,然后把數(shù)據(jù)自動(dòng)合并,比如下面的url
http://xxx.com/ajaxChain.x?id=|one,two?id=1|
這個(gè)url請(qǐng)請(qǐng)求了兩個(gè)action,然后把a(bǔ)ction數(shù)據(jù)合并,比如本來(lái)one.x返回的數(shù)據(jù)是{"name":"111"},而two返回的數(shù)據(jù)是 {"name":"2222"};則現(xiàn)在應(yīng)該返回的是{"one":{"name":"111"},"two?id=1",{"name":"2222"}},這樣,ajaxChain支持無(wú)數(shù)個(gè)action的連接。這樣以后可以將多個(gè)ajax合并為一個(gè)ajax,節(jié)省服務(wù)器資源。

    好了,IMVC的ajax支持就講到這里。


剎那 2008-06-11 19:14 發(fā)表評(píng)論
]]>
IMVC特性詳解---非侵入性http://m.tkk7.com/kingyaoo/archive/2008/06/10/206965.html剎那剎那Tue, 10 Jun 2008 09:38:00 GMThttp://m.tkk7.com/kingyaoo/archive/2008/06/10/206965.htmlhttp://m.tkk7.com/kingyaoo/comments/206965.htmlhttp://m.tkk7.com/kingyaoo/archive/2008/06/10/206965.html#Feedback0http://m.tkk7.com/kingyaoo/comments/commentRss/206965.htmlhttp://m.tkk7.com/kingyaoo/services/trackbacks/206965.html     1.action非繼承。由于java語(yǔ)言不允許多重繼承,如果action被框架所迫需要繼承類的話,那么這個(gè)action的擴(kuò)展性將受到一定的限制,比如struts的繼承性就設(shè)計(jì)的比較失敗。

    2.formBean的無(wú)侵入,IMVC中的formBean不需要繼承人和類,甚至不需要實(shí)現(xiàn)任何接口,完全的一個(gè)pojo實(shí)體就能勝任。

    3.半servlet容器相關(guān)性,之所以說(shuō)是半,因?yàn)镮MVC的容器無(wú)關(guān)性是間于struts和webwork之間的,struts的action接受 httpServletRequest和HttpServletResponse類實(shí)例作為參數(shù),另測(cè)試變得避免麻煩(雖然有工具可以輔助測(cè)試),這種 servlet完全相關(guān)性的設(shè)計(jì),讓action中獲取servlet數(shù)據(jù)變得容易,但是卻帶來(lái)了測(cè)試痛苦的后果。而反過(guò)來(lái),webwork的 action中不需要傳入任何servlet相關(guān)部件,webwork通過(guò)一個(gè)轉(zhuǎn)回去把servlet中的數(shù)據(jù)拷貝到一個(gè)容器無(wú)關(guān)類。非常有利于測(cè)試,但是對(duì)于在action中獲取servlet數(shù)據(jù)變得不夠直觀(可以獲取的),而且,每次請(qǐng)求都拷貝數(shù)據(jù)也有礙于性能的提升。IMVC的設(shè)計(jì)則介于兩者之間。在IMVC的action中沒(méi)有傳入servlet任何部件,但是可以通過(guò)InstantContext獲得request和response(注意不是獲取request的數(shù)據(jù),而是request,不用花費(fèi)拷貝到性能)。但是,在攔截器設(shè)計(jì)中,傳入的卻是 servlet部件,因?yàn)閿r截器一般不會(huì)用于action單元測(cè)試,而且如果你對(duì)上面的action半容器無(wú)關(guān)性對(duì)于單元測(cè)試和獲取cookies的數(shù)據(jù)有疑惑,那么可以在攔截器中獲取你想要的cookie,然后傳入攔截器的另一個(gè)參數(shù)Value,action通過(guò)Value獲取cookie,這樣一來(lái),明明半容器無(wú)關(guān)性的action測(cè)試,卻可以通過(guò)攔截器來(lái)實(shí)現(xiàn)完全容器無(wú)關(guān)的action,這樣一來(lái),既滿足性能需求,又滿足測(cè)試需求。

    4 攔截器的天下。和webwork一樣,IMVC中的攔截器是相當(dāng)重要的組成部分??梢耘渲萌?jǐn)r截器,路徑攔截器,ajax鏈(這個(gè)以后會(huì)詳解)攔截器,有趣的是,我們還有一個(gè)文件上傳攔截器,IMVC是集成文件上傳到,可以通過(guò)在action幾行代碼實(shí)現(xiàn)一個(gè)文件上傳,而一般我們要更具自己的特性來(lái)處理上傳完后的文件或者自定義的取名字,在或者做自己的縮略圖等等。IMVC設(shè)計(jì)了一個(gè)文件上傳攔截器,可以通過(guò)實(shí)例一個(gè)攔截器來(lái)實(shí)現(xiàn)這些功能,非常方便。


剎那 2008-06-10 17:38 發(fā)表評(píng)論
]]>
IMVC 核心接口介紹http://m.tkk7.com/kingyaoo/archive/2008/06/10/206944.html剎那剎那Tue, 10 Jun 2008 08:30:00 GMThttp://m.tkk7.com/kingyaoo/archive/2008/06/10/206944.htmlhttp://m.tkk7.com/kingyaoo/comments/206944.htmlhttp://m.tkk7.com/kingyaoo/archive/2008/06/10/206944.html#Feedback0http://m.tkk7.com/kingyaoo/comments/commentRss/206944.htmlhttp://m.tkk7.com/kingyaoo/services/trackbacks/206944.html 1.IAction接口
   action是整個(gè)MVC的核心,如果了解struts或者webwork等MVC框架的朋友應(yīng)該 知道,action是一個(gè)用戶處理模塊,當(dāng)MVC容器接受到一個(gè)請(qǐng)求的時(shí)候,他會(huì)通過(guò)一定的方法獲得一個(gè)相應(yīng)的action類,然后執(zhí)行action類中 相應(yīng)的方法,最后返回一個(gè)視圖給客戶端,這就是最普通的mvc框架的流程。和其他框架的action類似,IMVC的action接口也有一個(gè)核心方法, 如下
public interface IAction {
    
/**
     * 屬性介紹:驗(yàn)證器,放入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";
    
/**
     * 方法說(shuō)明:action的核心方法
& nbsp;    * 
< span style="color: #808080;">@param object 如果是post方法,object就 是該action對(duì)應(yīng)的form,如果是get方法并且配置get方法沒(méi)有form
     * 那么這里就是null,如果配置get方法也是有form的,這里也是form
     * 
& nbsp;    * 
< span style="color: #808080;">@param value  一個(gè)map,在 action中添加內(nèi)容到view都往這里添加
     * 
@return 
     * String
     
*/
    
public View execute(Object object,Value value);
}
前 面三個(gè)變量這里暫時(shí)不說(shuō),我們來(lái)關(guān)注最后一個(gè)方法,execute,任何action都需要實(shí)現(xiàn)這個(gè)接口,同時(shí)也就是說(shuō)必須在action中有這個(gè)方法。 這個(gè)方法有兩個(gè)傳入變量Object和Value,第一個(gè)是想要的formBean,如果是get方法并且沒(méi)有配置get方法設(shè)置form,那么這個(gè)時(shí)候 就是null,如果是非get方法,而且還傳入了參數(shù),那么IMVC會(huì)自動(dòng)封裝相應(yīng)的form傳入到這個(gè)。第二個(gè)Value參數(shù),Value也是一個(gè)很核 心的接口。在IMVC中有ValueImpl類來(lái)實(shí)現(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);
    }
 
// 以下實(shí)現(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();
    }
}
這個(gè)類也相當(dāng)簡(jiǎn)單,我們看第一句:
public final class ValueImpl extends HashMap  implements Map,Value,InstantValue
說(shuō) 明這個(gè)類 繼承了HashMap,實(shí)現(xiàn)了Map,Value,InstantValue 三個(gè)接口。這三個(gè)接口其實(shí)就是三個(gè)權(quán)限版本,比如Value是用 戶操作權(quán)限,我們看到在action中傳入的是Value,但是在IMVC內(nèi)部操作的時(shí)候是把ValueImpl類轉(zhuǎn)換為InstantValue借口的

InstantValue 接口:
public interface InstantValue {
    
public void setArray(String key,String[] value);
}
這個(gè)幾口只有一個(gè)方法,這個(gè)方法是不會(huì)暴露給用戶的,是提供IMVC內(nèi)部設(shè)值用的。
下面還有一個(gè)攔截器接口
IInerceptor 攔截器接口:
public interface IInterceptor {
    
public void execute(HttpServletRequest request,HttpServletResponse response,Value value);
}
這個(gè)接口也相當(dāng)簡(jiǎn)單,只有一個(gè)方法,傳入request和response參數(shù),同時(shí)還有一個(gè)Value參數(shù),這個(gè)Value上面已經(jīng)說(shuō)過(guò),是一個(gè)用戶操作的數(shù)據(jù)接口。

整個(gè)IMVC流程圖簡(jiǎn)單來(lái)說(shuō)如下:


   首先,請(qǐng)求來(lái)了后,IMVC會(huì)創(chuàng)建一個(gè)ValueImp轉(zhuǎn)換為Value傳給前攔截器(如果沒(méi)有設(shè) 置就不用),攔截器操作完畢,在把這個(gè)ValueImp轉(zhuǎn)換為InstantValue接口傳給IMVC內(nèi)部操作,操作完畢接著把它轉(zhuǎn)化為Value接口 供用戶Action操作,最后執(zhí)行后攔截器,執(zhí)行完畢轉(zhuǎn)換為Map借口供模板引擎渲染試圖。
    一個(gè)ValueImp要轉(zhuǎn)換為三種權(quán)限接口,所以他的實(shí)現(xiàn)就要implements 三個(gè)接口。



剎那 2008-06-10 16:30 發(fā)表評(píng)論
]]>
IMVC 框架 hello world 程序。。。。。http://m.tkk7.com/kingyaoo/archive/2008/06/10/206942.html剎那剎那Tue, 10 Jun 2008 08:29:00 GMThttp://m.tkk7.com/kingyaoo/archive/2008/06/10/206942.htmlhttp://m.tkk7.com/kingyaoo/comments/206942.htmlhttp://m.tkk7.com/kingyaoo/archive/2008/06/10/206942.html#Feedback0http://m.tkk7.com/kingyaoo/comments/commentRss/206942.htmlhttp://m.tkk7.com/kingyaoo/services/trackbacks/206942.html
& nbsp;   首先導(dǎo)入InstantMVC(一下簡(jiǎn)稱IMVC)的包,和相應(yīng)的依賴包(主要一些開源的包,比如 commons等)    
    然后再eclipse中新建一個(gè)web項(xiàng)目。。這個(gè)就不用說(shuō)了吧。
    然后在classPath下創(chuàng)建一個(gè)配置文件 mvcConfig.xml(名字任意起),內(nèi)如大概如下:
<baseConfig 
        actionPackageBasePath
="test.action"
        formPackageBasePath
="test.form"
        templateBasePath
="/template"
        resourceBasePath
="/re"
        urlPostfix
=".x"
        webUrl
="yao.com:8282"
    
/>
<optionalConfig
        isOpenActionCache
="false"
        isOpenValidationCache
="false"
        isGetMethodHasForm
="false"
        isOpenAjaxIdentityValidate
="false"
        fileUploadBasePath
="/upload"
        fileUploadMax
="1974592963"
        fileUploadFormat
="pdf,jpg,gif"
        printOutCharacter
="UTF-8"
        templateCharacter
="UTF-8"
        uploadCharacter
="UTF-8"
        isOpenFreemarkerCache
="false"
    
/>
   前面那個(gè) baseConfig是必須設(shè)置,后面optionalConfig是可選,可以不設(shè)置,IMVC有默認(rèn)設(shè)置。具體的配置如下:
必填:
actionPackageBasePath :基礎(chǔ)action包根目錄
formPackageBasePath:基礎(chǔ)form包根目錄
templateBasePath:基礎(chǔ)模板文件根目錄
resourceBasePath:InstantMVC自帶的資源文件目錄
urlPostfix:action請(qǐng)求后綴
webUrl:網(wǎng)站域名,比如yao.com主要用于ajaxView的權(quán)限檢測(cè)

可選:
isOpenActionCache="false" :是否開啟action的緩存,也就是是否設(shè)置action為單例
isOpenValidationCache="false":是否開啟檢驗(yàn)框架的緩存
isGetMethodHasForm="false":是否為get方法也設(shè)置form填充
isOpenAjaxIdentityValidate="false":是否開啟ajaxView的權(quán)限驗(yàn)證(不能跨域調(diào)用)
fileUploadBasePath="/upload":文件上傳根目錄,默認(rèn)是/upload
fileUploadMax="1974592963":上傳文件最大 ,可選,默認(rèn)1048576=1024×1024 b
fileUploadFormat="pdf,jpg,gif":上傳允許默認(rèn)的格式,可選,默認(rèn)為 pdf,jpg,gif,txt
printOutCharacter="UTF-8" : #可選,默認(rèn)為UTF-8,表示通過(guò)action直接打印到客戶端字符的編碼,一般用到ajax發(fā)生 
templateCharacter="UTF-8" :#可選,默認(rèn)為UTF-8 ,表示通過(guò)模板方式顯示到客戶端的編碼,一般用到直接的請(qǐng)求
isOpenFreemarkerCache="false":#是否開啟freemarker模板緩存

最基礎(chǔ)的配置就這些了,后面那個(gè)可選其實(shí)也可以去掉。

然后我們?cè)陧?xiàng)目中新建立一個(gè)包
test.action.test
然后在包下新舊一個(gè)java類:Hello:
public class Hello implements IAction{

    
public View execute(Object object, Value value) {
& nbsp;        value.setObject(
"< /span>hello" "hello,歡迎來(lái)到 InstantMVC的世界。。。 ");
        
return ViewFactory.getView("/test.html");
    }
    
}
ok,然后我們?cè)?web項(xiàng)目根目錄下創(chuàng)建一個(gè)模板文件夾 template
在template下創(chuàng)建一個(gè)html文件 :test.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  
<head>
    
<title>test.html</title>
    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    
<meta http-equiv="description" content="this is my page">
    
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
  
</head>
  
<body>
   ${hello}
<br />
  
</body>
</html>
很 簡(jiǎn)單的Html,里面只有一個(gè)地方需要主意的就是 ${hello}這個(gè)東西,還記得上面Hello.java中的value.setObject(" hello" "hello,歡迎來(lái)到InstantMVC的世界。。。"); 嗎?其實(shí)這就是取出hello中的值。好一切配置都完成。額。好像還缺點(diǎn)什么,對(duì),沒(méi)有配置web.xml,下面是基本的 配置:< br />
<servlet>
        
<servlet-name>instantMVCController</servlet-name>
        
<servlet-class>yao.instant.mvc.sevlet.InstantFrontController</servlet-class>
        
<init-param>
            
<param-name>mvc_config</param-name>
            
<param-value>/mvcConfig.xml</param-value>
        
</init-param>
        
<init-param>
            
<param-name>single_config</param-name>
            
<param-value>/instant.single</param-value>
        
</init-param>
        
<load-on-startup>0</load-on-startup>
    
</servlet>
    
<servlet-mapping>
        
<servlet-name>instantMVCController</servlet-name>
        
<url-pattern>*.x</url-pattern>
    
</servlet-mapping>
   
其 中yao.instant.mvc.sevlet.InstantFrontController 是IMVC的前端攔截器,有兩個(gè)參數(shù),第一個(gè)是剛剛寫的配置文件mvcConfig.xml相對(duì)于classPath的路徑,第二個(gè)是IMVC內(nèi)建的一個(gè) 對(duì)象管理容器的配置,這里可以先不寫(或則在classPath下新建一個(gè)空的文件Instant.single,內(nèi)容不用寫)。下面那個(gè)是url映射, 把.x的后綴映射到IMVC框架。好了,一切的搞定,下面就運(yùn)行

啟動(dòng)tomcat,在瀏覽器中輸入http://localhost:8080/test/hello.x 就會(huì)看到一下結(jié)果:

看,一個(gè)簡(jiǎn)單的helloworld程序就完成了。下面我們回顧一下這個(gè)過(guò)程是怎么進(jìn)行的。

   首先,我們先回顧下我們的配置文件中有一個(gè)配置選項(xiàng):
actionPackageBasePath="test.action" 
這 個(gè)選項(xiàng)表示IMVC將會(huì)首先通過(guò)這個(gè)路徑去尋找相應(yīng)的匹配url的action,比如我們上面的url是:/test/hello.x 那么IMVC會(huì)首 先尋找 test.action.test包下的Hello類,如果沒(méi)有存在,會(huì)報(bào)異常,如果存在,就執(zhí)行Hello類的execute方法。在 execute方法最后返回了一個(gè)View,其中一個(gè)參數(shù)是模板位置,比如本例中是View("/test.html"),那么這個(gè)文件在哪呢?IMVC 又是怎么去尋找的呢,再回來(lái)看配置文件,其中的一個(gè)參數(shù):
templateBasePath="/template"
這 個(gè)參數(shù)的意識(shí)就是吧web目錄下的template作為主要的模板文件的根目錄,此例中/test.html就是尋找的 /template/test.html文件,然后渲染模板,會(huì)把其中的${hello}參數(shù)渲染為 action中通過(guò)value這個(gè)對(duì)象設(shè)置的值,比 如本例中是:value.setObject("hello", "hello,歡迎來(lái)到InstantMVC的世界。。。");< br />
    至此,一個(gè)簡(jiǎn)單的get方法的IMVC流程結(jié)束。

    這里其他的功能沒(méi)有說(shuō)道,比如View中有一種專門的返回ajax的View類型,比如還有攔截器,比如還有form填充和參數(shù)獲取等都沒(méi)說(shuō),下次再詳細(xì)說(shuō)明。

ps:InstantMVC目前還在內(nèi)部修改完善,還不能提供版本下載。




剎那 2008-06-10 16:29 發(fā)表評(píng)論
]]>
IMVC--j2ee輕量級(jí)MVC框架介紹http://m.tkk7.com/kingyaoo/archive/2008/06/10/206939.html剎那剎那Tue, 10 Jun 2008 08:24:00 GMThttp://m.tkk7.com/kingyaoo/archive/2008/06/10/206939.htmlhttp://m.tkk7.com/kingyaoo/comments/206939.htmlhttp://m.tkk7.com/kingyaoo/archive/2008/06/10/206939.html#Feedback2http://m.tkk7.com/kingyaoo/comments/commentRss/206939.htmlhttp://m.tkk7.com/kingyaoo/services/trackbacks/206939.html     1.討厭的action配置,無(wú)論是strtus還是webwork,都有一大堆的action配置文件,strtus加上bean就更多,如果 webwork配合spring,那么一個(gè)action就要配置一個(gè)spring Bean,一個(gè)webwork action映射,隨著項(xiàng)目的擴(kuò)大,后來(lái)實(shí)在是讓人有些受不了,再則,隨著項(xiàng)目的擴(kuò)大,action數(shù)目的增加,每次改動(dòng)重新啟動(dòng)服務(wù)器的時(shí)間浪費(fèi)就更 大,所以項(xiàng)目越來(lái)越大,感覺(jué)越來(lái)越痛苦,雖然配置型的action,對(duì)于項(xiàng)目的移植有一定的好處,但是一般的項(xiàng)目是很少回過(guò)頭去修改action映射,就 算修改,在java文件中修改也是可以接受的。

    2.關(guān)于驗(yàn)證,struts和webwork的驗(yàn)證都是基于xml配置的,就我個(gè)人而言,是比較討厭xml配置這個(gè)東西的,所以我一直用不慣他們的驗(yàn)證框 架,而且一旦用到驗(yàn)證框架,必須用到UI組件,在webwork中用freemarker作為模板的時(shí)候,UI組件是比較費(fèi)資源的(可能成為潛在的性能瓶 頸),如果有一個(gè)不用UI組件而且外面封裝客戶端和服務(wù)器端驗(yàn)證的MVC框架,我想會(huì)比較爽。

    3.關(guān)于view,我比較喜歡springMVC中的那種直接在action中return的形式,webwork和struts的配置方式我也很不喜歡。

    4.應(yīng)該是性能考慮,webwork的action非單利可能導(dǎo)致性能問(wèn)題(雖然沒(méi)有被充分證明),struts2也走了這條路。

    基于這些考慮,我打算開發(fā)自己的MVC框架,而且現(xiàn)在已經(jīng)小有所成,基本功能已經(jīng)完成,下面簡(jiǎn)單講下InstantMVC框架的主要特征
    1.零配置,零配置不是說(shuō)沒(méi)有配置,而是說(shuō)不用配置action和result view,整個(gè)mvc框架只有一個(gè)整體的配置文件,所有映射關(guān)系都是通過(guò)默認(rèn)規(guī)則來(lái)建立的。

    2.類似action/form 形式,這里說(shuō)是類似,因?yàn)镮nstantMVC可以配置讓get方法是否支持form,也就是get方法可以不用form,直接通過(guò)一個(gè)Map獲得請(qǐng)求參 數(shù),也可以配置get填充form形式,InstantMVC的action可以配置為是單利或者非單利,不過(guò)一般在action中不推薦存放非線程安全 的變量,所以建議配置為單利。

    3.action中兩個(gè)參數(shù)一個(gè)是Form的Object,一個(gè)是Map,容易單元測(cè)試,不需要引入Servlet部件,但是對(duì)于一些session等操 作可以通過(guò)InstantContext獲得HttpSerlvetrequest操作,可以說(shuō)InstantMVC對(duì)于容器無(wú)關(guān)性是介于webwork 和struts之間的。

    4.最簡(jiǎn)單的驗(yàn)證集成方式,所有驗(yàn)證代碼寫到action中,在view中不用配置UI組件,支持客戶端和服務(wù)器端雙重驗(yàn)證,可以單獨(dú)開啟一方關(guān)閉一方。

    5.ajax View的集成,這里的集成不像dwr那樣完全集成,而是一種半集成方式,客戶端用到ajax框架還是需要用戶自己選擇,這樣提供了很大的靈活性。 InstantMVC的View有好幾種形式,比如挑戰(zhàn)到另一個(gè)action的view,直接返回的view,ajax的view等, InstantMVC的ajax是和普通的action一樣的,只不過(guò)返回一個(gè)ajax的View就成了ajax了。ajax的view可以返回任何對(duì)象 的json。在客戶端很方便的獲得,這一點(diǎn)有點(diǎn)像dwr的返回結(jié)果,不過(guò)dwr需要配置,InstantMVC不用。而且我們可以設(shè)置開啟ajax的安全 驗(yàn)證,開啟后將不允許其他域方法ajax的action。

    6.支持AOP攔截器,模仿webwork那樣,可以自定義攔截器。

    7.集成了上傳組件,和驗(yàn)證一樣,可以在action中配置。

    大概就是這些特性,這些特性都很讓我著迷?,F(xiàn)在這些特性基本上都能工作,不過(guò)穩(wěn)定性兼容性方面還有待提升,同時(shí)還需要大量的性能方面考慮(雖然現(xiàn)在的性能比其他MVC只會(huì)高不會(huì)低)。今天剛把blog搬到這里來(lái),以后這里會(huì)主要寫關(guān)于我的框架的一些問(wèn)題等。


剎那 2008-06-10 16:24 發(fā)表評(píng)論
]]>
主站蜘蛛池模板: 久久亚洲国产欧洲精品一| 中文成人久久久久影院免费观看 | 精品亚洲国产成AV人片传媒| 免费一级成人毛片| 国内外成人免费视频| 久久国产高潮流白浆免费观看| caoporm超免费公开视频| 亚洲sm另类一区二区三区| 亚洲最大黄色网站| 色播亚洲视频在线观看| 亚洲精品乱码久久久久久| 亚洲高清偷拍一区二区三区| 永久免费看bbb| 亚洲第一成年免费网站| 免费看男女下面日出水来| 久久久久久AV无码免费网站下载| 一级特黄录像免费播放肥| 一级毛片在线免费播放| 免费人成视频在线观看免费| 老牛精品亚洲成av人片| 亚洲国产欧洲综合997久久| 久久久国产亚洲精品| 中文字幕 亚洲 有码 在线| 亚洲国产美女精品久久| 亚洲综合男人的天堂色婷婷| 亚洲国产高清在线| 亚洲国产天堂久久综合网站| 久久精品亚洲一区二区| 日本亚洲视频在线| 久久综合图区亚洲综合图区| 亚洲AV无码国产精品麻豆天美| 亚洲国产精品无码久久一线| 亚洲a一级免费视频| 亚洲色图校园春色| 亚洲导航深夜福利| 亚洲 暴爽 AV人人爽日日碰| 在线观看亚洲AV每日更新无码| 中文字幕在线观看亚洲日韩| 亚洲精品永久在线观看| 欧美亚洲国产SUV| 边摸边吃奶边做爽免费视频网站 |