176142998

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            116 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks
            DWR(直接Web遠程控制)項目是在Apache許可下的一個開源的解決方案,它提供了一種簡單的方式使得HTML頁面上的javascript可以訪問應用服務器的Java對象方法,是Ajax開發者可以方便使用的一個優雅框架。DWR具有一套Javascript功能集,它們把從HTML頁面調用應用服務器上的Java對象的方法簡化,操控不同類型的參數,同時保持了HTML代碼的可讀性。DWR實現的AJAX在某些方面很先進,包括動態生成javascript代碼;隱藏http協議等。

          web.xml配置:
          <servlet>
           <servlet-name>dwr-invoker</servlet-name>
           <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>  </servlet>
          <servlet-mapping>
           <servlet-name>dwr-invoker</servlet-name>
           <url-pattern>/dwr/*</url-pattern>
          </servlet-mapping>
          DWRServlet是DWR主Servlet,所有的/dwr/*所有請求都由這個servlet來處理。
          DWRServlet init()主要做了以下工作:
          1實例化DWR用到的Singleton類:AccessControl,Configuration,ConverterManager,CreatorManager,Processor
          2 讀去配置文件:包括dwr.jar包中的dwr.xml,WEB-INF/dwr.xml,web.xml。
          WEB-INF/dwr.xml文件告訴DWR哪些服務是要直接向JavaScript代碼公開的,以DWR的test為例:
              <create creator="new" javascript="JDate">
                <param name="class" value="java.util.Date"/>
                <exclude method="getHours"/>
                <auth method="getMinutes" role="admin"/>
                <auth method="getMinutes" role="devel"/>
              </create>
          DWR會根據此自動生成對應的JDate.js文件。new意味著DWR調用類的構造函數獲得實例,還可以通過跟Spring集成達到該目的。

          DWRServlet的doGet和doPost均直接調用Processor的handle方法處理,handle處理的/dwr/*請求包含以下幾類:
          1 dwr/index.html,dwr/test/只能在debug模式下供調試用
          2 對dwr/engine.js,dwr/util.js,dwr/deprecated.js的請求調用,直接從包中讀取相應的js文件流響應回去,
          并對相應做緩存處理,緩存以一個hashmap實現。
          3 對dwr/interface/的請求調用,DWR生成跟Java對應的javascript存根,DWR通過ConverterManager自動調整Java和javacript的參數類型匹配。
          4 客戶端javascript的實際調用,將通過handler方法的doExec執行。

          由此,DWR的運作流程是:
          客戶端包含3類javascript腳本
          1 java代碼的存根,即通過dwr/interface/調用,如<script type='text/javascript' src='dwr/interface/JDate.js'></script>
          如上所述,該存根由DWR具體是CreatorManager和ConvertorManager根據dwr.xml的配置進行自動生成
          2 DWR核心javascript庫,至少要包含<script type='text/javascript' src='dwr/engine.js'></script>,有時也需要包含util.js,util.js封裝了prototype的若干函數,便于第三方javascript調用
          3 第三方javascript,該腳本需要調用第一類存根腳本所封裝的Java代碼,第二類的engine.js等腳本為該調用提供通信支撐。這樣就達到了一個基本的RPC的目的,由于RPC本質上是同步進行,而AJAX的XMLHTTP為異步調用,為了實現異步機制,第三方javascript可以提供一個回調函數句柄傳入存根,待存根函數返回調用該回調,這樣即達到異步通信。
          posted on 2008-08-12 16:41 飛飛 閱讀(631) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 郴州市| 云安县| 大姚县| 沿河| 巍山| 同江市| 从江县| 石景山区| 蕉岭县| 商都县| 曲周县| 苏尼特右旗| 白银市| 隆子县| 大竹县| 兰州市| 资中县| 广饶县| 沭阳县| 闻喜县| 砚山县| 江西省| 静海县| 田东县| 邢台市| 定陶县| 尚义县| 乐山市| 河北区| 诸城市| 巴塘县| 彰武县| 丁青县| 化德县| 合肥市| 新乡县| 台山市| 大渡口区| 霍州市| 阿拉善右旗| 蒲江县|