隨筆 - 115  文章 - 481  trackbacks - 0
          <2007年2月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728123
          45678910

          常用鏈接

          留言簿(19)

          隨筆檔案(115)

          文章檔案(4)

          新聞檔案(1)

          成員連接

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

            在EasyJWeb對Ajax的支持中,通過引用類似<script type='text/javascript' src='ejf/easyajax/UserService.js'></script>的url可以動態得到調用服務器端業務組件的javascript腳本。另外,在基于EasyJWeb的CRUD應用中,也可以使用類似http://localhost:8080/user/edit/3的URL來編輯數據表中的某一條記錄。究竟EasyJWeb中是如何處理這些URL的呢?本文將作簡單的分析!
            在EasyJWeb中,有一個URL映射處理器,通過配置這個映射處理器可以非常簡單地實現Web應用中類似URLRewrite的需求。映射處理器了代碼如下所示:

          public ? interface ?IPathMappingRuler? {
          ?
          // 對請求路徑的解析;
          ? public ?String?getModuleName(); // 得到模板的名稱
          ? public ?Map?getParams();? // 得到模板缺省參數
          ? public ?String?getCommand(); // 得到模板命令
          }

            該接口的默認實現是com.easyjf.web.core.PathMappingRulerImpl,在基于EasyJWeb的應用中,每一個交由EasyJWeb框架處理的請求url,都會通過這個映射處理器進行轉換。通過使用EasyJWeb缺省URL映射轉換器,客戶端請求路徑/module/command/params將按以下請求規則,作如下的映射處理.
            映射處理前的URL:
            1、 /module/command/name=xxx
            2、 /module
            3、 /module/command
            4、 /module/command/12345
            5、/module/edit/12345/title=1111
            6、/moduel/title=測試

           映射處理的URL:
            1~? /module.ejf?easyjwebCommand=command&name=xxx
            2~? /module.ejf
            3~? /module.ejf?easyjwebCommand=command
            4~? /module.ejf?easyjwebCommand=command&cid=1234
            5、/module.ejf?easyJWebCommand=edit&cid=123455&title=111
            6、/module.ejf?title=測試


            因此,在一個EasyJWeb自動代碼生成的CRUD應用中,http://localhost:8080/user.ejf?easyJWebCommand=edit&cid=3 這個URL表示編輯user對象中屬性cid為3的信息。使用默認的映射處理規則,上面的url可以變成如下的形式:

            http://localhost:8080/user/edit/3

            這個url表示運行user.ejf這個模塊,傳送的命令為edit,標準key值為3。


            URL映射轉換器的一個最典型的應用示例,就是EasyJWeb-0.8版本開始增加的遠程Web腳本處理支持引擎,也即Ajax的部分功能。遠程JS腳本調用支持只是EasyJWeb中的一個小小插件,EasyJWeb的Ajax實現只是一個普通的EasyJWeb Module(Action)。這個Action即com.easyjf.web.ajax.AjaxEngineAction。

            看過本人《在EasyJWeb中輕松開發Ajax運用》一文的朋友都知道,遠程Web腳本調用涉及到一個如何生成調用服務器端方法的Javascript Stub問題。在EasyJWeb對Ajax的支持中,可以直接通過下面的URL來生成遠程javascript調用腳本。

          < script? type ='text/javascript'? src ="ejf/easyajax/prototype.js" ></ script >
          < script? type ='text/javascript'? src ='ejf/easyajax/engine.js' ></ script > ?
          < script? type ='text/javascript'? src ='ejf/easyajax/UserService.js' ></ script >

            第一句返回prototype.js腳本,第二句返回EasyJWeb的Ajax支持引擎engine.js腳本,第三句返回生成服務器UserService組件的遠程調用腳本。
            上面的URL,改成通過原生的EasyJWeb URL來引用,可以寫成下面的形式:

          < script? type ='text/javascript'? src ="easyajax.ejf?easyJWebCommand=prototype.js" ></ script >
          < script? type ='text/javascript'? src ='easyajax.ejf?engine.js' ></ script > ?
          < script? type ='text/javascript'? src ='easyajax.ejf?easyJWebCommand=UserService' ></ script >

            AjaxEngineAction中處理這幾個調用代碼如下:

          public ?Page?doEngine(WebForm?form,?Module?module)? throws ?Exception? {
          ??
          return ?module.findPage( " engine-js " );
          ?}


          public ?Page?doPrototype(WebForm?form,?Module?module)? throws ?Exception? {
          ??
          return ?module.findPage( " prototype " );
          ?}
           

          public ?Page?doAjaxHome(WebForm?form,?Module?module)? throws ?Exception? {
          ??String?command?
          = ?CommUtil.null2String(form.get( " easyJWebCommand " ));
          ??
          if ?(command.endsWith( " .js " ))
          ??
          {
          ???command?
          = ?command.substring( 0 ,?command.length()? - ? 3 );
          ??}

          ??Object?bean
          = AjaxUtil.getServiceContainer().getService(command);??
          ??
          // System.out.println(command);
          ??form.addResult( " scriptName " ,?command);
          ??form.addResult(
          " methodList " ,?AjaxUtil.getAjaxStub(bean));
          ??
          return ?module.findPage( " stub " );
          ?}


          小結:
            一個簡單適用的Web MVC框架,不僅僅是實現單純的頁面及代碼分離功能,還應該提供更多的與Web應用相關的實用工具及解決通用應用需求抽象功能。在EasyJWeb中,除擁有了很多MVC框架的基本特性以外,還內置了很多解決應用Web應用程序中一些通過需求的工具,比如URL映射處理、自動代碼生成、權限系統支持等,因此會使得我們開發Web應用程序開發變得更加簡單、高效。作為一個完全由國內Java開源愛好者發起及實現的Web MCX框架,雖然在EasyJWeb-0.8版本中還存在著很多問題,但只要有更多的開源愛好者參與到其中來,相信在以后的版本中會不斷得到完善。

          (本文作者:EasyJF開源??大峽 歡迎轉載,轉載請保留作者聲明,謝謝!)

          posted on 2007-02-10 18:49 簡易java框架 閱讀(1180) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 壶关县| 万源市| 苍南县| 南丹县| 永清县| 金阳县| 凌云县| 隆安县| 万载县| 潮州市| 洪泽县| 开原市| 灵武市| 双桥区| 溧阳市| 通化县| 江达县| 莱州市| 诸暨市| 吐鲁番市| 光山县| 新巴尔虎左旗| 开阳县| 石楼县| 濮阳市| 长白| 海安县| 定陶县| 甘泉县| 鹤庆县| 广西| 个旧市| 沙雅县| 墨竹工卡县| 四子王旗| 门源| 金塔县| 舞钢市| 公主岭市| 印江| 丰顺县|