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

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

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

    隨筆-57  評(píng)論-129  文章-0  trackbacks-0
     

    JSA的壓縮過程分兩步,第一步是語(yǔ)法壓縮,類似于Dojo ShrinkSafe,但比他安全,也比他有效。



    第二步是文本壓縮,目前采用的是

    JavaScript Compressor的壓縮算法。

    (http://dean.edwards.name/packer/ )



    這些都可以在設(shè)置窗口設(shè)置。

    默認(rèn)情況先用語(yǔ)法壓縮,當(dāng)文件大于1000k且采用文本壓縮仍然可以壓縮到原來大小90%時(shí)才在原來基礎(chǔ)上采用文本壓縮。







    to shinwell

    你的擔(dān)心多余了。



    to dev:

    Online Dojo JavaScript Compressor 就是 Dojo ShrinkSafe 。

    說的好聽,其實(shí)一點(diǎn)都不safe。

    如果你覺得火藥桶上暖和,那你就多坐一會(huì)吧!



    下載地址:

    http://sourceforge.net/project/showfiles.php?group_id=175776

    或者

    http://forum.xidea.org 文件列表




    評(píng)論也很精彩,請(qǐng)點(diǎn)擊查看精彩評(píng)論。歡迎您也添加評(píng)論。查看詳細(xì) >>





    JavaEye推薦
    杭州:外企高薪聘請(qǐng)系統(tǒng)維護(hù)工程師(10-15K)
    杭州:國(guó)內(nèi)大型網(wǎng)絡(luò)公司高薪招聘系統(tǒng)架構(gòu)師,資深JAVA開發(fā)工程師
    北京:優(yōu)秀公司NHNChina招聘:WEB開發(fā),系統(tǒng)管理,JAVA開發(fā), DBA
    廣州:急招 JAVA開發(fā)經(jīng)理/系統(tǒng)架構(gòu)師(10-15K/月)也招聘java程序員



    文章來源: http://jindw.javaeye.com/blog/57832
    posted @ 2007-03-06 18:43 金大為 閱讀(137) | 評(píng)論 (0)編輯 收藏

    山若不高,不必繞行。
    水若不寬,蹦過也成。
    居于陋室,五風(fēng)俱興。
    四壁管弦奏,秋雨瀉前廳。
    出入有蟲蟻,往來驚犬禽。

    可以鳴長(zhǎng)銃,獵山雞。
    清絲竹之亂耳,去案牘之勞形。
    祖山靜修寺,荷嶺微波亭。
    大為曰∶“逛逛也行”

    文章來源:http://jindw.spaces.live.com/Blog/cns!4D0B98F5F0C51177!107.entry
    posted @ 2007-02-09 18:26 金大為 閱讀(77) | 評(píng)論 (0)編輯 收藏

    JavaScript Integration 1.1Alpha6發(fā)布






    原名JSPackager,無(wú)侵入的腳本管理框架。


    更多信息見:


    http://www.xidea.org


    http://forum.xidea.org


    現(xiàn)在發(fā)布的1.1a6版本有如下重大改進(jìn):


    XML Template for JavaScript


    Xml Template for JavaScript,使用原生xml解析,和腳本求值運(yùn)算(eval函數(shù)),實(shí)現(xiàn)的xml模板引擎(js.xml.Template)。非常簡(jiǎn)潔。


    1.1alpha6之后自帶的jsdoc工具,就是使用該技術(shù)開發(fā)的。




    JSI組建模型 JSDecorator 雛形


    用于裝飾樸素html元素的框架,使用簡(jiǎn)單的xml標(biāo)記,標(biāo)識(shí)期裝飾行為,比如將一個(gè)不通的input裝飾成一個(gè)日期輸入控件。將一個(gè)textarea裝飾成一個(gè)代碼語(yǔ)法高亮顯示區(qū)域,或一個(gè)wysiwyg html編輯器。


    JSI啟動(dòng)后將自動(dòng)檢查decorator標(biāo)記,自動(dòng)做相關(guān)類的尋找、導(dǎo)入并裝飾頁(yè)面。


    腳本API實(shí)時(shí)解析程序(JSDoc)


    基于xml template 開發(fā)的文檔工具,實(shí)時(shí)解析,無(wú)需安裝任何軟件,純html/js應(yīng)用程序。可以簡(jiǎn)化文檔寫作及api查閱。




     




    評(píng)論也很精彩,請(qǐng)點(diǎn)擊查看精彩評(píng)論。歡迎您也添加評(píng)論。查看詳細(xì) >>

    推薦相關(guān)文章:
      簡(jiǎn)單小巧的多級(jí)聯(lián)動(dòng)菜單
      JavaScript 解析 XML 時(shí)如何通過名稱直接取到值?




    JavaEye推薦
    杭州:外企高薪聘請(qǐng)系統(tǒng)維護(hù)工程師(10-15K)
    杭州:國(guó)內(nèi)大型網(wǎng)絡(luò)公司高薪招聘系統(tǒng)架構(gòu)師,資深JAVA開發(fā)工程師
    北京:優(yōu)秀公司NHNChina招聘:WEB開發(fā),系統(tǒng)管理,JAVA開發(fā), DBA
    廣州:急招 JAVA開發(fā)經(jīng)理/系統(tǒng)架構(gòu)師(10-15K/月)也招聘java程序員



    文章來源: http://jindw.javaeye.com/blog/53489
    posted @ 2007-02-09 12:03 金大為 閱讀(69) | 評(píng)論 (0)編輯 收藏

    非常討厭Struts1 Action的設(shè)計(jì),一堆花俏的概念,沒必要的復(fù)雜度.
    但是工作關(guān)系,還非要使用這個(gè)垃圾,沒辦法,只好把蒼蠅包起來咽下去.

    做一個(gè)Action基類,SimpleAction ,把它封裝的更像webwork.
     
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.util.HashMap;
    import java.util.Map;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.commons.beanutils.BeanUtilsBean;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;


    /**
     * @author jindw
     * @xwork.package name = ""
     */
    public final class SimpleAction extends AbstractAction {
        /**
         * Commons Logging instance.
         */
        protected static Log log = LogFactory.getLog(SimpleAction.class);

        /**
         * common result name define
         */
        public static final String SUCCESS = "success";

        public static final String ERROR = "error";

        public static final String INPUT = "input";

        /**
         * method cache
         */
        protected Map executeMap = new HashMap();

        protected Map executeArgumentTypesMap = new HashMap();

        public SimpleAction() {
            super();
            Method[] methods = this.getClass().getMethods();
            for (int i = 0; i < methods.length; i++) {

                Method method = methods[i];
                if (String.class != method.getReturnType()) {
                    continue;
                }
                Class[] params = method.getParameterTypes();
                int argCount = 0;
                for (int j = 0; j < params.length; j++) {
                    if (ActionForm.class.isAssignableFrom(params[j])) {
                        argCount++;
                    } else if (HttpServletRequest.class.isAssignableFrom(params[j])) {
                        argCount++;
                    } else if (HttpServletResponse.class
                            .isAssignableFrom(params[j])) {
                        argCount++;
                    } else if (ActionMapping.class.isAssignableFrom(params[j])) {
                        argCount++;
                    } else {
                        argCount = -1;
                        break;
                    }
                }
                if (argCount >= 0) {
                    executeMap.put(method.getName(), method);
                    executeArgumentTypesMap.put(method.getName(), params);
                }
            }
            initialize();
        }

        protected void initialize() {
            Method[] methods = this.getClass().getMethods();
            for (int i = 0; i < methods.length; i++) {
                Class[] paramTypes = methods[i].getParameterTypes();
                if (paramTypes.length == 1) {
                    String name = methods[i].getName();
                    if (name.startsWith("set")) {
                        name = name.substring(3);
                        if (name.length() > 0) {
                            char fc = name.charAt(0);
                            if (Character.isUpperCase(fc)) {
                                name = Character.toLowerCase(fc)
                                        + name.substring(1);
                                //implement it eg:get from Spring Context
                                Object value = getBean(name);
                                if (value != null) {
                                    try {
                                        methods[i].invoke(this,
                                                new Object[] { value });
                                    } catch (Exception e) {
                                        log.info("set property error:", e);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }



        public ActionForward execute(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
            // Get the method's name. This could be overridden in subclasses.
            String methodName = getMethodName(mapping, form);
            // Invoke the named method, and return the result
            String result = dispatchMethod(mapping, form, request, response,
                    methodName);
            request.setAttribute("actionForm", form);
            if(result == null){
                return null;
            }else{
                return transformForward(mapping.findForward(result), request);
            }
        }

        /**
         * @param forward
         * @param request
         * @return
         */
        protected ActionForward transformForward(ActionForward forward,
                HttpServletRequest request) {
            if (forward == null) {
                return null;
            } else {
                StringBuffer buf = new StringBuffer(forward.getPath());
                boolean containsVariable = false;
                for (int k = 0, i = buf.indexOf("${", k); i >= 0; i = buf.indexOf(
                        "${", k), k = i) {
                    int j = buf.indexOf("}", i);
                    if (j > 0) {
                        containsVariable = true;
                        k = j;
                        String key = buf.substring(i + 2, j);
                        Object o = null;
                        if(key.indexOf('.')<0){
                            o=request.getAttribute(key);
                        }else{
                            String[] keys = key.split("[.]");
                            o=request.getAttribute(keys[0]);
                            for(int l = 1;l<keys.length;l++){
                                try
                                {
                                    o = BeanUtilsBean.getInstance().getPropertyUtils().getProperty(o, keys[l].trim());
                                }
                                catch (Exception e)
                                {
                                    log.debug("find property error:", e);
                                    o = null;
                                    break;
                                }
                                
                            }
                        }
                        buf.replace(i, j + 1, String.valueOf(o));
                    }
                }
                if (containsVariable) {
                    forward = new ActionForward(forward);
                    forward.setPath(buf.toString());
                    return forward;
                } else {
                    return forward;
                }
            }
        }

        public static void main(String[] args) {
            StringBuffer buf = new StringBuffer("http://sdssfs${123}&{123}&${sd}");
            for (int k = 0, i = buf.indexOf("${", k); i >= 0; i = buf.indexOf("${",
                    k), k = i) {
                int j = buf.indexOf("}", i);
                if (j > 0) {
                    k = j;
                    String key = buf.substring(i + 2, j);
                    buf.replace(i, j + 1, "%" + key + "%");
                }
            }
            System.out.println(buf);
        }

        protected String dispatchMethod(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response,
                String methodName) throws IllegalArgumentException,
                IllegalAccessException, InvocationTargetException {
            Method method = (Method) executeMap.get(methodName);
            Class[] argumentTypes = (Class[]) executeArgumentTypesMap
                    .get(methodName);
            Object[] params = new Object[argumentTypes.length];
            for (int i = 0; i < params.length; i++) {
                Class type = argumentTypes[i];
                if (ActionForm.class.isAssignableFrom(type)) {
                    if(type.isAssignableFrom(form.getClass())){
                        params[i] = form;
                    }else{
                        throw new ClassCastException("action form type is:"+form.getClass()+";but required:"+type+";");
                    }
                } else if (HttpServletRequest.class.isAssignableFrom(type)) {
                    params[i] = request;
                } else if (HttpServletResponse.class.isAssignableFrom(type)) {
                    params[i] = response;
                } else if (ActionMapping.class.isAssignableFrom(type)) {
                    params[i] = mapping;
                }
            }
            return (String) method.invoke(this, params);
        }

        protected String getMethodName(ActionMapping mapping, ActionForm form) {
            String param = mapping.getParameter();
            if (param != null) {
                int i = param.indexOf("method=");
                if (i > 0) {
                    int j = param.indexOf(i, ';');
                    if (j >= 0) {
                        return param.substring(i + ("method=".length()), j).trim();
                    } else {
                        return param.substring(i + ("method=".length())).trim();
                    }
                } else {
                    if (this.executeMap.containsKey(param)) {
                        return param;
                    }
                }
            }
            return "execute";
        }


    }





    評(píng)論也很精彩,請(qǐng)點(diǎn)擊查看精彩評(píng)論。歡迎您也添加評(píng)論。查看詳細(xì) >>





    JavaEye推薦
    杭州:外企高薪聘請(qǐng)系統(tǒng)維護(hù)工程師(10-15K)
    杭州:國(guó)內(nèi)大型網(wǎng)絡(luò)公司高薪招聘系統(tǒng)架構(gòu)師,資深JAVA開發(fā)工程師
    北京:優(yōu)秀公司NHNChina招聘:WEB開發(fā),系統(tǒng)管理,JAVA開發(fā), DBA
    廣州:急招 JAVA開發(fā)經(jīng)理/系統(tǒng)架構(gòu)師(10-15K/月)也招聘java程序員



    文章來源: http://jindw.javaeye.com/blog/33983
    posted @ 2006-09-05 18:01 金大為 閱讀(81) | 評(píng)論 (0)編輯 收藏

    今天無(wú)意間看了幾篇struts1相關(guān)的新文章,有些反感作者自以為是的觀點(diǎn):

    不知道國(guó)人為什么還會(huì)對(duì)struts1這種垃圾會(huì)如此盲目崇拜。

    在我看來,struts1除了制造了一堆中看不中用的可以用來折磨開發(fā)人員的概念之外,沒做幾項(xiàng)漂亮的事情(我承認(rèn)這樣說是偏激,只是給那些某些盲目崇拜的struts1寫手們的反擊而已)。

    曾經(jīng)struts1提出的創(chuàng)造性模式,一些新的mvc框架也都具備,也做了些自己的改進(jìn),也許以前 struts1是一個(gè)創(chuàng)造性的成果,但現(xiàn)在來說,它只是一個(gè)鋪路石而已!

    IT技術(shù)都是各領(lǐng)風(fēng)騷3兩年,它該隱退了,那個(gè)老態(tài)臃腫的家伙---Struts1。

    最近Struts項(xiàng)目也開始做一些顛覆性的改進(jìn),比如struts2將來自webwork,將使用xwork作為它的核心。這也從一個(gè)側(cè)面反映了原來struts1的迷茫。

    那些自以為是的struts1文檔寫手,醒醒吧,別誤導(dǎo)新人了。




    評(píng)論也很精彩,請(qǐng)點(diǎn)擊查看精彩評(píng)論。歡迎您也添加評(píng)論。查看詳細(xì) >>





    JavaEye推薦
    杭州:外企高薪聘請(qǐng)系統(tǒng)維護(hù)工程師(10-15K)
    杭州:國(guó)內(nèi)大型網(wǎng)絡(luò)公司高薪招聘系統(tǒng)架構(gòu)師,資深JAVA開發(fā)工程師
    北京:優(yōu)秀公司NHNChina招聘:WEB開發(fā),系統(tǒng)管理,JAVA開發(fā), DBA
    廣州:急招 JAVA開發(fā)經(jīng)理/系統(tǒng)架構(gòu)師(10-15K/月)也招聘java程序員



    文章來源: http://jindw.javaeye.com/blog/33984
    posted @ 2006-08-12 19:02 金大為 閱讀(39) | 評(píng)論 (0)編輯 收藏

    微軟的幫助文件,其提供了一個(gè)叫做“HTML Help Workshop”的工具制作和編譯。

    但是其目錄編輯的操作不是很方便,而且絕對(duì)是件非常枯燥的事情。

    看看他的目錄描述文件:

     <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
    <HTML>
    <HEAD>
    <meta name="GENERATOR" content="Microsoft® HTML Help Workshop 4.1">
    <!-- Sitemap 1.0 -->
    </HEAD>
    <BODY>
    <OBJECT type="text/site properties">
     <param name="ImageType" value="Folder">
    </OBJECT>
    <UL>
       <LI> <OBJECT type="text/sitemap">
          <param name="Name" value="index">
          <param name="Local" value="html\index.html">
          </OBJECT>
      <LI> <OBJECT type="text/sitemap">
         <param name="Name" value="前言">
         <param name="Local" value="html/preface.html">
         </OBJECT>
    ..........................
    </UL>
    </BODY></HTML>

    好了,是一種用html 文本描述的結(jié)構(gòu),我們只要在其中插入幾個(gè)表示目錄的OBJECT標(biāo)記就是。

    對(duì)于hibernate 參考來說,其目錄寫在一個(gè)index.html文件中,我們可以簡(jiǎn)單的通過網(wǎng)頁(yè)腳本吧它的目錄讀出,代碼如下:

    <textarea id=text rows="30" cols="100" wrap="off"
     ondblclick="writeTree(this)"
    ></textarea>

     <script>
     function writeTree(disp,root){
       if(root == null){
         root=document.body.getElementsByTagName("DL")[0];
       }
       var value = ""
       value += '<HTML><!-- Sitemap 1.0 --><BODY><OBJECT type="text/site properties"><param name="Window Styles" value="0x800025"><param name="ImageNumber" value="11"></OBJECT><UL>\n';
       value += buildTree(0,root);
       value += '</UL></BODY></HTML>';
       disp.value= value;
     }
     function buildTree(deep,root){
       var perfix="";
       for(var j=0;j<deep;j++){
         perfix+='\t';
       }
       var value="";
       var eles = root.childNodes;
       for(var i=0;i<eles.length;i++){
          var entry = eles[i];
          if(entry.tagName == "DT"){
            var link = entry.getElementsByTagName("A")[0];
            if(link.firstChild){
              value+=perfix;
              value+='<LI> <OBJECT type="text/sitemap">';
            value+='<param name="Name" value="'+link.firstChild.nodeValue+'">';
            value+='<param name="Local" value="guide/'+link.getAttribute("href")+'">';
            value+='</OBJECT>\n';
          }
        }else if(entry.tagName == "DD"){
          var dir = entry.getElementsByTagName("DL")[0]; 
          value+=perfix+"<UL>\n";
          value+=buildTree(deep+1,dir);
          value+=perfix+"</UL>\n";
        }
         

       }
       return value;
     }
     </script>


    將這段代碼插入htm文件的body 元素后,打開,雙擊多行文本框。將聲稱chm 目錄描述,將其保存為contents.hhc,重新打開chm工程后,將contents.hhc文件加入到工程,編譯,chm 文件制作完成。






    評(píng)論也很精彩,請(qǐng)點(diǎn)擊查看精彩評(píng)論。歡迎您也添加評(píng)論。查看詳細(xì) >>





    JavaEye推薦
    杭州:外企高薪聘請(qǐng)系統(tǒng)維護(hù)工程師(10-15K)
    杭州:國(guó)內(nèi)大型網(wǎng)絡(luò)公司高薪招聘系統(tǒng)架構(gòu)師,資深JAVA開發(fā)工程師
    北京:優(yōu)秀公司NHNChina招聘:WEB開發(fā),系統(tǒng)管理,JAVA開發(fā), DBA
    廣州:急招 JAVA開發(fā)經(jīng)理/系統(tǒng)架構(gòu)師(10-15K/月)也招聘java程序員



    文章來源: http://jindw.javaeye.com/blog/33990
    posted @ 2005-06-11 15:26 金大為 閱讀(74) | 評(píng)論 (0)編輯 收藏
    僅列出標(biāo)題
    共6頁(yè): 上一頁(yè) 1 2 3 4 5 6 
    主站蜘蛛池模板: 免费一区二区三区四区五区| 成人免费一区二区三区| 亚洲a∨国产av综合av下载| 亚洲av第一网站久章草| 看Aⅴ免费毛片手机播放| 巨胸狂喷奶水视频www网站免费| 97在线视频免费公开视频| 99久在线国内在线播放免费观看| 久久久免费精品re6| 免费无码黄十八禁网站在线观看| 国产美女做a免费视频软件| 精品国产人成亚洲区| 亚洲国产精品自在线一区二区| 亚洲视频网站在线观看| 亚洲欧美日韩综合俺去了| 一级毛片一级毛片免费毛片| 久久青草91免费观看| 国产精品69白浆在线观看免费| 国产zzjjzzjj视频全免费| 国产亚洲精品资源在线26u| 亚洲人成网站18禁止久久影院| 亚洲а∨精品天堂在线| 两个人日本WWW免费版| 亚洲毛片免费视频| 巨胸喷奶水视频www网免费| 亚洲国产91精品无码专区| 国产精品无码免费播放| 国产a不卡片精品免费观看| 亚洲伊人久久大香线蕉综合图片| 亚洲邪恶天堂影院在线观看| 中文字幕 亚洲 有码 在线| 亚洲AV无码专区国产乱码不卡| 国内少妇偷人精品视频免费| 亚洲三级高清免费| 四虎亚洲国产成人久久精品| 国产亚洲精品一品区99热| 亚洲情A成黄在线观看动漫软件 | 男女交性永久免费视频播放 | 免费观看美女用震蛋喷水的视频| 成人免费无码大片A毛片抽搐| 亚洲国产精品狼友中文久久久 |