隨筆-57  評論-129  文章-0  trackbacks-0
           

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



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

          JavaScript Compressor的壓縮算法。

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



          這些都可以在設置窗口設置。

          默認情況先用語法壓縮,當文件大于1000k且采用文本壓縮仍然可以壓縮到原來大小90%時才在原來基礎上采用文本壓縮。







          to shinwell

          你的擔心多余了。



          to dev:

          Online Dojo JavaScript Compressor 就是 Dojo ShrinkSafe 。

          說的好聽,其實一點都不safe。

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



          下載地址:

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

          或者

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




          評論也很精彩,請點擊查看精彩評論。歡迎您也添加評論。查看詳細 >>





          JavaEye推薦
          杭州:外企高薪聘請系統維護工程師(10-15K)
          杭州:國內大型網絡公司高薪招聘系統架構師,資深JAVA開發工程師
          北京:優秀公司NHNChina招聘:WEB開發,系統管理,JAVA開發, DBA
          廣州:急招 JAVA開發經理/系統架構師(10-15K/月)也招聘java程序員



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

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

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

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

          JavaScript Integration 1.1Alpha6發布






          原名JSPackager,無侵入的腳本管理框架。


          更多信息見:


          http://www.xidea.org


          http://forum.xidea.org


          現在發布的1.1a6版本有如下重大改進:


          XML Template for JavaScript


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


          1.1alpha6之后自帶的jsdoc工具,就是使用該技術開發的。




          JSI組建模型 JSDecorator 雛形


          用于裝飾樸素html元素的框架,使用簡單的xml標記,標識期裝飾行為,比如將一個不通的input裝飾成一個日期輸入控件。將一個textarea裝飾成一個代碼語法高亮顯示區域,或一個wysiwyg html編輯器。


          JSI啟動后將自動檢查decorator標記,自動做相關類的尋找、導入并裝飾頁面。


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


          基于xml template 開發的文檔工具,實時解析,無需安裝任何軟件,純html/js應用程序。可以簡化文檔寫作及api查閱。




           




          評論也很精彩,請點擊查看精彩評論。歡迎您也添加評論。查看詳細 >>

          推薦相關文章:
            簡單小巧的多級聯動菜單
            JavaScript 解析 XML 時如何通過名稱直接取到值?




          JavaEye推薦
          杭州:外企高薪聘請系統維護工程師(10-15K)
          杭州:國內大型網絡公司高薪招聘系統架構師,資深JAVA開發工程師
          北京:優秀公司NHNChina招聘:WEB開發,系統管理,JAVA開發, DBA
          廣州:急招 JAVA開發經理/系統架構師(10-15K/月)也招聘java程序員



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

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

          做一個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";
              }


          }





          評論也很精彩,請點擊查看精彩評論。歡迎您也添加評論。查看詳細 >>





          JavaEye推薦
          杭州:外企高薪聘請系統維護工程師(10-15K)
          杭州:國內大型網絡公司高薪招聘系統架構師,資深JAVA開發工程師
          北京:優秀公司NHNChina招聘:WEB開發,系統管理,JAVA開發, DBA
          廣州:急招 JAVA開發經理/系統架構師(10-15K/月)也招聘java程序員



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

          今天無意間看了幾篇struts1相關的新文章,有些反感作者自以為是的觀點:

          不知道國人為什么還會對struts1這種垃圾會如此盲目崇拜。

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

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

          IT技術都是各領風騷3兩年,它該隱退了,那個老態臃腫的家伙---Struts1。

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

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




          評論也很精彩,請點擊查看精彩評論。歡迎您也添加評論。查看詳細 >>





          JavaEye推薦
          杭州:外企高薪聘請系統維護工程師(10-15K)
          杭州:國內大型網絡公司高薪招聘系統架構師,資深JAVA開發工程師
          北京:優秀公司NHNChina招聘:WEB開發,系統管理,JAVA開發, DBA
          廣州:急招 JAVA開發經理/系統架構師(10-15K/月)也招聘java程序員



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

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

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

          看看他的目錄描述文件:

           <!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 文本描述的結構,我們只要在其中插入幾個表示目錄的OBJECT標記就是。

          對于hibernate 參考來說,其目錄寫在一個index.html文件中,我們可以簡單的通過網頁腳本吧它的目錄讀出,代碼如下:

          <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 文件制作完成。






          評論也很精彩,請點擊查看精彩評論。歡迎您也添加評論。查看詳細 >>





          JavaEye推薦
          杭州:外企高薪聘請系統維護工程師(10-15K)
          杭州:國內大型網絡公司高薪招聘系統架構師,資深JAVA開發工程師
          北京:優秀公司NHNChina招聘:WEB開發,系統管理,JAVA開發, DBA
          廣州:急招 JAVA開發經理/系統架構師(10-15K/月)也招聘java程序員



          文章來源: http://jindw.javaeye.com/blog/33990
          posted @ 2005-06-11 15:26 金大為 閱讀(77) | 評論 (0)編輯 收藏
          僅列出標題
          共6頁: 上一頁 1 2 3 4 5 6 
          主站蜘蛛池模板: 互助| 鄂尔多斯市| 安福县| 罗山县| 吉首市| 海城市| 娱乐| 武平县| 湾仔区| 陈巴尔虎旗| 五寨县| 米脂县| 景宁| 东海县| 漳平市| 旅游| 武威市| 温州市| 上饶县| 沾化县| 永州市| 南阳市| 通州市| 彩票| 肇庆市| 桦川县| 板桥市| 从江县| 余干县| 镇宁| 奉节县| 蕲春县| 康平县| 开封县| 长治市| 铅山县| 信阳市| 乌什县| 方山县| 海兴县| 政和县|