<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    設(shè)計(jì)java

    j2ee輕量級框架,IMVC,IORM && web網(wǎng)絡(luò)游戲

    2008年6月11日 #

    抽取最小的jre--BuildJre項(xiàng)目開啟

        java在桌面軟件的失利,很大程度上取決與她運(yùn)行環(huán)境的陪著復(fù)雜度,還有隨時(shí)帶的一個(gè)龐大的jre環(huán)境。有時(shí)候我們并不需要jre中全部的類庫支持,我們只需要一些對我們項(xiàng)目有用的類庫,能否有一種通用的方法來抽取jre中的這些對我們有用的部分呢?google了下找到了幾篇文章介紹這個(gè)的。主要就是用verbose參數(shù)運(yùn)行jar,然后觀察java載入了多少java類,然后手動(dòng)或者寫個(gè)程序自動(dòng)的吧這些類打包和jvm打包為一個(gè)全新的jre環(huán)境。這種方法是可行的,但是卻是不通用,而且這種方法還有一個(gè)很大的弊端,當(dāng)有些類導(dǎo)入到我們項(xiàng)目中,但是在verbose的時(shí)候沒有用到(比如一些異常類),我們就不會(huì)導(dǎo)入,最終可能在發(fā)布運(yùn)行的時(shí)候就用到了,這樣可不妙。那么是否還有其他方法來瘦身jre環(huán)境呢,然后通過隨身附帶jre發(fā)布java程序?答案一定是有的,我已經(jīng)著手在開發(fā)這個(gè)應(yīng)用,我把她起名為BuildJre。
        一,可行性分析(我們加上在win系統(tǒng)下):
           java.exe是java運(yùn)行的一個(gè)入口程序,當(dāng)我們鍵入明了 java className的時(shí)候,首先啟動(dòng)都是這個(gè)程序,然后這個(gè)程序回去查找可用的jre庫,一般是先搜索本目錄和父親目錄,如果接著搜索環(huán)境變量,判斷是否為jre的依據(jù)是,首先java.exe查找懷疑目錄(比如父目錄)的bin下有沒有java.dll,如果找到,那么他就判定這個(gè)是jre目錄然后查找lib\i386下的jvm.cfg,最后更具這里面的參數(shù)去啟動(dòng)bin\client或者bin\server下的jvm.dll,這個(gè)才是真正的java虛擬機(jī),到這里,java.exe把控制權(quán)全部交給jvm,然后jvm就初始化,分配內(nèi)存等,運(yùn)行程序了,運(yùn)行程序期間導(dǎo)入的jdk包,都在jre目錄下的lib\rt.jar下。
           說道這里,我們發(fā)現(xiàn),其實(shí)不用環(huán)境變量,只要有jre環(huán)境就能運(yùn)行java程序,這使得我們更加堅(jiān)定java程序也可以桌面化,因?yàn)樗彩强梢圆挥门渲媚敲绰闊┑沫h(huán)境變量直接運(yùn)行的。再回到瘦身來,剛才說了,jdk中所有的以來包全部位于jre\lib\rt.jar下,我們要廋的就是這個(gè),40多M的rt,我們通過類依賴抽取,對于一個(gè)普通的java程序,預(yù)計(jì)可以廋到小于10M,然后配合java.exe,java.dll,等幾個(gè)小的程序,預(yù)計(jì)目標(biāo)是平均廋身到15M以內(nèi)。

        二,實(shí)施思路,用verbose方法不通用,不能在程序內(nèi)部抽取jre,而且還有可能遺漏依賴項(xiàng),不足提倡。我們架設(shè)有一個(gè)標(biāo)志的依賴說明庫,比如ArrayList這個(gè)類依賴的所有包都一一對應(yīng),那么我們?nèi)绻诔绦蚶飅mport ArrayList的話,那么我們可以迅速抽取相關(guān)的依賴包,然后在整個(gè)項(xiàng)目的所有import中去重復(fù),不就ok了?現(xiàn)在的問題在于:
              1,不是所有的jdk包都需要import的,比如java.lang下就不用import
              2,有些jdk內(nèi)部類在同一個(gè)包下不用寫import也一樣依賴。
              3,計(jì)算jdk內(nèi)部依賴估計(jì)要很長實(shí)踐,因?yàn)槲募芏啵蕾嚭軓?fù)雜。
        這些問題基本上都有解決方法,我已經(jīng)開始著手解決。

        希望有一天,我們的java項(xiàng)目發(fā)布,只要帶上10M的小型環(huán)境,也不用配置環(huán)境變量,雙擊,ok。。哈哈

    posted @ 2008-08-05 20:59 剎那 閱讀(2038) | 評論 (2)編輯 收藏

    突然說幾句

        這年頭,webgame一個(gè)一個(gè)的冒出來,令我們應(yīng)接不暇,有人說webgame是一場新的泡沫,也有人說是互聯(lián)網(wǎng)新的機(jī)會(huì),有人說webgame是小公司叫板游戲行業(yè)的機(jī)會(huì),也有資深游戲人士說小公司做webgmae沒戲(盛大高管說,因?yàn)闆]有品牌和玩家資源)。不管怎么樣,webgame的興起已經(jīng)無法阻擋,包括我們公司,也是眾進(jìn)軍者中的一個(gè)。

        webgame游戲商進(jìn)軍的主要兩個(gè)領(lǐng)域是 策略類游戲(往往以js,ajax技術(shù)和純通的web技術(shù)為基礎(chǔ)),和flash休閑社區(qū)游戲(以flash as3等技術(shù)為基礎(chǔ))。策略類游戲很早就有了,甚至比現(xiàn)在的門戶網(wǎng)站還早,只是那個(gè)時(shí)候沒有現(xiàn)在這么興起,時(shí)下具有代表性的主要是一些三國,戰(zhàn)爭類游戲,像盛大這種大游戲公司也介入不少,連baidu這種重來不碰游戲的公司都開始進(jìn)入了。而flash游戲相對來說比較少,比如夢境家園(純休閑娛樂,可以k歌),比如熱舞街(勁舞團(tuán)的web版),天空左岸 和 富豪街 等都不錯(cuò)。還有兩個(gè)我本人比較期待的還沒有公測的flash網(wǎng)游,一個(gè)是昆侖online,一個(gè)是和熱舞街,富豪街同一個(gè)公司的 口袋寵物。看他們的游戲截圖已經(jīng)非常類似傳統(tǒng)的大型游戲了。當(dāng)然,更期待的是我們在開發(fā)的flash網(wǎng)游,哈,內(nèi)容和名字現(xiàn)在還不能透露(小小透露下,我們的網(wǎng)游pk模式和現(xiàn)在任何一種網(wǎng)游的pk模式都不同,挺好玩的哦)。

        。。。。不想說了。。想起來一本書上的一句話“真正有想法的人,已經(jīng)埋頭在實(shí)現(xiàn)自己的想法了,不會(huì)把自己的想法寫出來,在網(wǎng)上瞎扯淡的,都是沒事干的。”

    posted @ 2008-07-26 12:49 剎那 閱讀(344) | 評論 (2)編輯 收藏

    游戲開發(fā)進(jìn)展

        游戲前臺(tái)主要以flash as3 為主,后臺(tái)用java,目前已經(jīng)初步做出一個(gè)原型,包括用戶行走,多用戶移動(dòng)同步,地圖場景與主程序分離,場景加載等等功能,地圖編輯器也已經(jīng)做的差不多了,計(jì)劃今天能完成,如果完成的話,就可以直接拿給美工去做地圖場景了,最終導(dǎo)出一個(gè)xml文件和相關(guān)的資源(圖片等),主程序通過這個(gè)xml文件加載場景。
        這幾天主要的任務(wù)包括 客戶端UI統(tǒng)一界面設(shè)計(jì),需要做到高耦合,讓ui界面通過xml文件配置,服務(wù)器端數(shù)據(jù)庫的設(shè)計(jì),主程序調(diào)用外部swf模塊的企業(yè)級設(shè)計(jì),游戲任務(wù)腳本語言的初步設(shè)計(jì),等等。

    posted @ 2008-07-17 07:10 剎那 閱讀(241) | 評論 (0)編輯 收藏

    開始正式做網(wǎng)游啦

    以后開始正式要做網(wǎng)絡(luò)游戲啦,flash前臺(tái),java后臺(tái)。嘿嘿

    posted @ 2008-07-06 16:03 剎那 閱讀(311) | 評論 (0)編輯 收藏

    IMVC 1.0 提供下載

        還沒有整理出完整的api,里面有一個(gè)簡單的例子。

        下載

    posted @ 2008-06-21 20:31 剎那 閱讀(336) | 評論 (0)編輯 收藏

    IMVC框架特性詳解--ajax支持

        IMVC對ajax有了很好的支持。主要體現(xiàn)在兩方面。

        一 ajax View類型支持。Imvc的視同是通過一個(gè)View類來返回的,在action中通過return new View("/xxx.html")返回一個(gè)視圖,然后IMVC會(huì)通過Value中的數(shù)據(jù)渲染這個(gè)視圖。這是一般的流程,有些特殊的流程可以返回其他類型的View,我們先來看看View類的代碼:
    public final class View implements Cloneable{
        
    /**
         * 屬性介紹:普通的view,通過模板轉(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,通過模板轉(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,通過ViewFactory.getView("/tt.html")這個(gè)方法返回的是普通的view,也就是可以通過IMVC渲染的視圖,而
    TYPE_REDIRECT則是返回一個(gè)跳轉(zhuǎn)view,可以跳轉(zhuǎn)到下一個(gè)action,TYPE_REDIRECT2也是一個(gè)跳轉(zhuǎn)view,不過是改變URL地址的view。TYPE_AJAX就是ajax試圖了,也是今天要講的主角了,至于最后一個(gè)TYPE_EXCEPTION,是把異常返回到客戶端瀏覽器到view,這里暫時(shí)不考慮。我們可以通過這樣一個(gè)構(gòu)造函數(shù)創(chuàng)造出ajax試圖,比如new  View("這是ajax信息",View.TYPE_AJAX),或者通過ViewFactory.getView("這是ajax信息",View.TYPE_AJAX)也是一樣,不過用factory創(chuàng)建的對象是通過對象的clone創(chuàng)建的,能節(jié)省一定的性能開銷。當(dāng)返回的是一個(gè)ajax View的時(shí)候,信息就會(huì)直接返回,而不是通過渲染試圖,比如上面的就直接返回“這是ajax信息”給客戶端,如果這個(gè)action是由客戶端ajax請求的話,直接返回?cái)?shù)據(jù),是不是很方便呢?

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

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

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

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

    posted @ 2008-06-11 19:14 剎那 閱讀(733) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 国产免费久久精品久久久| 9420免费高清在线视频| 在线观看亚洲AV每日更新无码| 亚洲女人18毛片水真多| 亚洲日韩看片无码电影| 深夜久久AAAAA级毛片免费看| 污污视频网站免费观看| 久久黄色免费网站| 日韩免费精品视频| 免费一看一级毛片| 亚洲妇女水蜜桃av网网站| 免费在线视频你懂的| 亚洲国产综合人成综合网站| 一本色道久久综合亚洲精品高清 | 中文日本免费高清| 久久99青青精品免费观看| 日韩视频在线免费观看| 国产亚洲无线码一区二区 | 日韩视频在线免费观看| 国产亚洲精品仙踪林在线播放| 国产成人AV免费观看| 日韩a在线观看免费观看| 精品无码专区亚洲| 日本最新免费网站| 亚洲中文字幕无码中文| 免费国产精品视频| 在线免费观看伊人三级电影| 国产成人免费a在线视频色戒| 精品日韩亚洲AV无码 | 99久久婷婷国产综合亚洲| 久久精品免费网站网| 妞干网免费观看视频| 亚洲精品私拍国产福利在线| 污污免费在线观看| 久久亚洲精品无码| 亚美影视免费在线观看| 亚洲福利在线播放| 亚洲国产成人精品无码区二本| 中文字幕av无码无卡免费| 亚洲午夜久久影院| 在线观看永久免费视频网站|