永久域名在线精品,av大大超碰在线,2019中文字幕在线观看http://www.aygfsteel.com/kingyaoo/category/32026.html設計java,設計人生zh-cnThu, 12 Jun 2008 14:11:32 GMTThu, 12 Jun 2008 14:11:32 GMT60IMVC框架特性詳解--ajax支持http://www.aygfsteel.com/kingyaoo/archive/2008/06/11/207185.html剎那剎那Wed, 11 Jun 2008 11:14:00 GMThttp://www.aygfsteel.com/kingyaoo/archive/2008/06/11/207185.htmlhttp://www.aygfsteel.com/kingyaoo/comments/207185.htmlhttp://www.aygfsteel.com/kingyaoo/archive/2008/06/11/207185.html#Feedback0http://www.aygfsteel.com/kingyaoo/comments/commentRss/207185.htmlhttp://www.aygfsteel.com/kingyaoo/services/trackbacks/207185.html
    一 ajax View類型支持。Imvc的視同是通過一個View類來返回的,在action中通過return new View("/xxx.html")返回一個視圖,然后IMVC會通過Value中的數據渲染這個視圖。這是一般的流程,有些特殊的流程可以返回其他類型的View,我們先來看看View類的代碼:
public final class View implements Cloneable{
    
/**
     * 屬性介紹:普通的view,通過模板轉換
     
*/
    
public static final int TYPE_VIEW=1;
    
/**
     * 屬性介紹:轉向,不改變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;
    }
}
我們主要關注以下幾個變量:
 /**
     * 屬性介紹:普通的view,通過模板轉換
     
*/
    
public static final int TYPE_VIEW=1;
    
/**
     * 屬性介紹:轉向,不改變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;
    第一個是普通的View,通過ViewFactory.getView("/tt.html")這個方法返回的是普通的view,也就是可以通過IMVC渲染的視圖,而
TYPE_REDIRECT則是返回一個跳轉view,可以跳轉到下一個action,TYPE_REDIRECT2也是一個跳轉view,不過是改變URL地址的view。TYPE_AJAX就是ajax試圖了,也是今天要講的主角了,至于最后一個TYPE_EXCEPTION,是把異常返回到客戶端瀏覽器到view,這里暫時不考慮。我們可以通過這樣一個構造函數創造出ajax試圖,比如new  View("這是ajax信息",View.TYPE_AJAX),或者通過ViewFactory.getView("這是ajax信息",View.TYPE_AJAX)也是一樣,不過用factory創建的對象是通過對象的clone創建的,能節省一定的性能開銷。當返回的是一個ajax View的時候,信息就會直接返回,而不是通過渲染試圖,比如上面的就直接返回“這是ajax信息”給客戶端,如果這個action是由客戶端ajax請求的話,直接返回數據,是不是很方便呢?

    接下來的ajx特性也許會讓你覺得更方便,比如以下代碼:

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

    二 ajax Chain支持。我們假設有一個全部ajax的網頁,里面有幾個div中的數據都是通過ajax的方式向服務器請求的,那么每個div都會請求一次ajax action,這樣就導致了請求次數頻繁,資源的浪費,IMVC提供了一種ajaxChain的概念,可以通過一個url請求多個action,然后把數據自動合并,比如下面的url
http://xxx.com/ajaxChain.x?id=|one,two?id=1|
這個url請請求了兩個action,然后把action數據合并,比如本來one.x返回的數據是{"name":"111"},而two返回的數據是 {"name":"2222"};則現在應該返回的是{"one":{"name":"111"},"two?id=1",{"name":"2222"}},這樣,ajaxChain支持無數個action的連接。這樣以后可以將多個ajax合并為一個ajax,節省服務器資源。

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


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

    2.formBean的無侵入,IMVC中的formBean不需要繼承人和類,甚至不需要實現任何接口,完全的一個pojo實體就能勝任。

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

    4 攔截器的天下。和webwork一樣,IMVC中的攔截器是相當重要的組成部分。可以配置全局攔截器,路徑攔截器,ajax鏈(這個以后會詳解)攔截器,有趣的是,我們還有一個文件上傳攔截器,IMVC是集成文件上傳到,可以通過在action幾行代碼實現一個文件上傳,而一般我們要更具自己的特性來處理上傳完后的文件或者自定義的取名字,在或者做自己的縮略圖等等。IMVC設計了一個文件上傳攔截器,可以通過實例一個攔截器來實現這些功能,非常方便。


剎那 2008-06-10 17:38 發表評論
]]>
IMVC 核心接口介紹http://www.aygfsteel.com/kingyaoo/archive/2008/06/10/206944.html剎那剎那Tue, 10 Jun 2008 08:30:00 GMThttp://www.aygfsteel.com/kingyaoo/archive/2008/06/10/206944.htmlhttp://www.aygfsteel.com/kingyaoo/comments/206944.htmlhttp://www.aygfsteel.com/kingyaoo/archive/2008/06/10/206944.html#Feedback0http://www.aygfsteel.com/kingyaoo/comments/commentRss/206944.htmlhttp://www.aygfsteel.com/kingyaoo/services/trackbacks/206944.html 1.IAction接口
   action是整個MVC的核心,如果了解struts或者webwork等MVC框架的朋友應該 知道,action是一個用戶處理模塊,當MVC容器接受到一個請求的時候,他會通過一定的方法獲得一個相應的action類,然后執行action類中 相應的方法,最后返回一個視圖給客戶端,這就是最普通的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對應的form,如果是get方法并且配置get方法沒有form
     * 那么這里就是null,如果配置get方法也是有form的,這里也是form
     * 
& nbsp;    * 
< span style="color: #808080;">@param value  一個map,在 action中添加內容到view都往這里添加
     * 
@return 
     * String
     
*/
    
public View execute(Object object,Value value);
}
前 面三個變量這里暫時不說,我們來關注最后一個方法,execute,任何action都需要實現這個接口,同時也就是說必須在action中有這個方法。 這個方法有兩個傳入變量Object和Value,第一個是想要的formBean,如果是get方法并且沒有配置get方法設置form,那么這個時候 就是null,如果是非get方法,而且還傳入了參數,那么IMVC會自動封裝相應的form傳入到這個。第二個Value參數,Value也是一個很核 心的接口。在IMVC中有ValueImpl類來實現。

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);
    }
 
// 以下實現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();
    }
}
這個類也相當簡單,我們看第一句:
public final class ValueImpl extends HashMap  implements Map,Value,InstantValue
說 明這個類 繼承了HashMap,實現了Map,Value,InstantValue 三個接口。這三個接口其實就是三個權限版本,比如Value是用 戶操作權限,我們看到在action中傳入的是Value,但是在IMVC內部操作的時候是把ValueImpl類轉換為InstantValue借口的

InstantValue 接口:
public interface InstantValue {
    
public void setArray(String key,String[] value);
}
這個幾口只有一個方法,這個方法是不會暴露給用戶的,是提供IMVC內部設值用的。
下面還有一個攔截器接口
IInerceptor 攔截器接口:
public interface IInterceptor {
    
public void execute(HttpServletRequest request,HttpServletResponse response,Value value);
}
這個接口也相當簡單,只有一個方法,傳入request和response參數,同時還有一個Value參數,這個Value上面已經說過,是一個用戶操作的數據接口。

整個IMVC流程圖簡單來說如下:


   首先,請求來了后,IMVC會創建一個ValueImp轉換為Value傳給前攔截器(如果沒有設 置就不用),攔截器操作完畢,在把這個ValueImp轉換為InstantValue接口傳給IMVC內部操作,操作完畢接著把它轉化為Value接口 供用戶Action操作,最后執行后攔截器,執行完畢轉換為Map借口供模板引擎渲染試圖。
    一個ValueImp要轉換為三種權限接口,所以他的實現就要implements 三個接口。



剎那 2008-06-10 16:30 發表評論
]]>
IMVC 框架 hello world 程序。。。。。http://www.aygfsteel.com/kingyaoo/archive/2008/06/10/206942.html剎那剎那Tue, 10 Jun 2008 08:29:00 GMThttp://www.aygfsteel.com/kingyaoo/archive/2008/06/10/206942.htmlhttp://www.aygfsteel.com/kingyaoo/comments/206942.htmlhttp://www.aygfsteel.com/kingyaoo/archive/2008/06/10/206942.html#Feedback0http://www.aygfsteel.com/kingyaoo/comments/commentRss/206942.htmlhttp://www.aygfsteel.com/kingyaoo/services/trackbacks/206942.html
& nbsp;   首先導入InstantMVC(一下簡稱IMVC)的包,和相應的依賴包(主要一些開源的包,比如 commons等)    
    然后再eclipse中新建一個web項目。。這個就不用說了吧。
    然后在classPath下創建一個配置文件 mvcConfig.xml(名字任意起),內如大概如下:
<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"
    
/>
   前面那個 baseConfig是必須設置,后面optionalConfig是可選,可以不設置,IMVC有默認設置。具體的配置如下:
必填:
actionPackageBasePath :基礎action包根目錄
formPackageBasePath:基礎form包根目錄
templateBasePath:基礎模板文件根目錄
resourceBasePath:InstantMVC自帶的資源文件目錄
urlPostfix:action請求后綴
webUrl:網站域名,比如yao.com主要用于ajaxView的權限檢測

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

最基礎的配置就這些了,后面那個可選其實也可以去掉。

然后我們在項目中新建立一個包
test.action.test
然后在包下新舊一個java類:Hello:
public class Hello implements IAction{

    
public View execute(Object object, Value value) {
& nbsp;        value.setObject(
"< /span>hello" "hello,歡迎來到 InstantMVC的世界。。。 ");
        
return ViewFactory.getView("/test.html");
    }
    
}
ok,然后我們在 web項目根目錄下創建一個模板文件夾 template
在template下創建一個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>
很 簡單的Html,里面只有一個地方需要主意的就是 ${hello}這個東西,還記得上面Hello.java中的value.setObject(" hello" "hello,歡迎來到InstantMVC的世界。。。"); 嗎?其實這就是取出hello中的值。好一切配置都完成。額。好像還缺點什么,對,沒有配置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的前端攔截器,有兩個參數,第一個是剛剛寫的配置文件mvcConfig.xml相對于classPath的路徑,第二個是IMVC內建的一個 對象管理容器的配置,這里可以先不寫(或則在classPath下新建一個空的文件Instant.single,內容不用寫)。下面那個是url映射, 把.x的后綴映射到IMVC框架。好了,一切的搞定,下面就運行

啟動tomcat,在瀏覽器中輸入http://localhost:8080/test/hello.x 就會看到一下結果:

看,一個簡單的helloworld程序就完成了。下面我們回顧一下這個過程是怎么進行的。

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

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

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




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

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

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

    4.應該是性能考慮,webwork的action非單利可能導致性能問題(雖然沒有被充分證明),struts2也走了這條路。

    基于這些考慮,我打算開發自己的MVC框架,而且現在已經小有所成,基本功能已經完成,下面簡單講下InstantMVC框架的主要特征
    1.零配置,零配置不是說沒有配置,而是說不用配置action和result view,整個mvc框架只有一個整體的配置文件,所有映射關系都是通過默認規則來建立的。

    2.類似action/form 形式,這里說是類似,因為InstantMVC可以配置讓get方法是否支持form,也就是get方法可以不用form,直接通過一個Map獲得請求參 數,也可以配置get填充form形式,InstantMVC的action可以配置為是單利或者非單利,不過一般在action中不推薦存放非線程安全 的變量,所以建議配置為單利。

    3.action中兩個參數一個是Form的Object,一個是Map,容易單元測試,不需要引入Servlet部件,但是對于一些session等操 作可以通過InstantContext獲得HttpSerlvetrequest操作,可以說InstantMVC對于容器無關性是介于webwork 和struts之間的。

    4.最簡單的驗證集成方式,所有驗證代碼寫到action中,在view中不用配置UI組件,支持客戶端和服務器端雙重驗證,可以單獨開啟一方關閉一方。

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

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

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

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


剎那 2008-06-10 16:24 發表評論
]]>
主站蜘蛛池模板: 汾西县| 延长县| 牙克石市| 太谷县| 英超| 阜新市| 泉州市| 巧家县| 星座| 焉耆| 太仆寺旗| 昌乐县| 敦化市| 怀柔区| 镇坪县| 确山县| 枣庄市| 应用必备| 红河县| 灵璧县| 格尔木市| 南陵县| 叶城县| 登封市| 武定县| 棋牌| 汕头市| 岳池县| 昔阳县| 呼伦贝尔市| 黔西县| 杂多县| 迁安市| 微博| 探索| 商洛市| 理塘县| 甘肃省| 淅川县| 郯城县| 明溪县|