posts - 0,  comments - 17,  trackbacks - 0
          這兩天學(xué)了下DWR,現(xiàn)在總結(jié)一下。
          DWR是方便使用AJAX連接JS和JAVA的的一個(gè)框架,把服務(wù)器端 Java 對(duì)象的方法公開給 JavaScript 代碼
          如果是用dwr2.0的jar包,還需要同時(shí)導(dǎo)入log4j.jar和commons-loggin.jar,勿忘!!
          web.xml和dwr.xml放在WEB-INF下!
          -----------------------------
          配置web.xml:WEB工程啟動(dòng)的時(shí)候會(huì)在這個(gè)里面找到具體所用到的類的路徑,由此進(jìn)行加載

          <servlet>
              <servlet-name> dwr-invoke </servlet-name>
              <servlet-class> uk.ltd.getahead.dwr.DWRServlet </servlet>
              <init-param> //這個(gè)是調(diào)試用,如果正式發(fā)布請(qǐng)?jiān)摓閒alse,不過聽說2.0就默認(rèn)為true了
                 <param-name> debug </param-value>
                 <param-value> true </param-value>
              </init-param>
              <init-param> //這個(gè)是DWR2.0必須的,不然會(huì)報(bào)java.lang.IllegalArgumentException
                 <param-name> classes </param-value>
                 <param-value> java.lang.Object </param-value>
          </servlet>

          <servlet-mapping>
              <servlet-name> dwr-invoke </servlet-name>
              <url-pattern> /dwr/* </url-pattern>
          </servlet-mapping>

          -----------------------------
          配置dwr.xml: dwr.xml的作用是讓你告訴DWR哪些class中的哪些方法你需要暴露給前臺(tái)使用,當(dāng)DWR啟動(dòng)時(shí)候根據(jù)dwr.xml這個(gè)文件把java類中的方法轉(zhuǎn)成js中可用的類中方法,使前臺(tái)可以使用。

          注:以下是不全按dwr2.0寫的,如果用的是DWR2.0,那java里暴露類(藍(lán)字顯示)不能寫在<create>屬性里,應(yīng)刪除后寫在<include method="" />前,<param name="class" value="***java里暴露的class,必須寫完整路徑***" />。


          <dwr>
              <allow>
                 <create creator="new" javascript="***js調(diào)用的class***" class="***java里暴露的class,必須寫完整路徑***">
                     <include method="***java暴露類里要公開的方法,如果不寫默認(rèn)全部公開***" />
                 </create>
              </allow>
          </dwr>

          -----------------------------
          在html或js頁面中加入
          <script src="<%=basePath %>dwr/interface/java里暴露的class"></script>  //切記不能<script *** />這樣寫
          <script src="<%=basePath %>dwr/engine.js"></script>   //Dwr的腳本驅(qū)動(dòng)Js,以上兩個(gè)必寫
          <script src="<%=basePath %>dwr/util.js"></script>   //這是個(gè)工具包,可以不調(diào)用
          <script type="text/javascript">
              function doMethod()
              {
                  //調(diào)用方法:若公開的類是AAA,公開的AAA里的方法是bbb([參數(shù)]);
                  AAA.bbb([參數(shù)],callBack);//回調(diào)函數(shù)callBack()
              }

              function callBack(data)//data是后臺(tái)返回的值,名字自取,也可省略,因?yàn)镴S允許
              {
                 處理方法……;//如果callBack()沒有寫明返回值,可以通過argments[0]拿到
              }
          </script>


          其實(shí)我們調(diào)用AAA.bbb([參數(shù)],callBack);就是做了以下這一步:
          (下面紅字是包裝好的,不在前臺(tái),所以即使你沒有創(chuàng)建html或者jsp來調(diào)用,也可以通過localhost:8080/工程名/dwr 來看到你暴露的java類進(jìn)行測(cè)試)
              function AAA() { };
              AAA.bbb = function([參數(shù)], callback)
              {
                  DWREngine._execute('/dwr/dwr', 'AAA', 'bbb', [參數(shù)], callback);
              }

          通過在dwr.xml暴露的方法得到j(luò)s里的方法,當(dāng)我們調(diào)用AAA.bbb時(shí)候再通過/dwr/dwr轉(zhuǎn)到DWRServlet中去用JAVA里的AAA.bbb方法,然后返回值到callback中(中間經(jīng)過dwr.xml的convert)


          ----------------------------
          上面對(duì)dwr的工作大致分析了下,現(xiàn)在對(duì)于參數(shù)類型的不同,對(duì)dwr.xml也要進(jìn)行修正。

          DWR自動(dòng)地在Java和JavaScript表示之間調(diào)整簡(jiǎn)單數(shù)據(jù)類型,這些類型包括Java原生類型和它們各自的封裝類表示,還有String、Date、數(shù)組和集合類型。但如果參數(shù)類型非簡(jiǎn)單數(shù)據(jù)類型,則要通過轉(zhuǎn)換。

          調(diào)用返回JavaBeanjava方法

          在dwr.xml的<allow>標(biāo)簽中加入

          <convert converter="bean" match="***一般來說是javabean***">  //int,String,list等不需要顯式的轉(zhuǎn)換就可以被js拿到
               <param name="include" value="***javabean中的屬性,用','隔開***" />  //這句可以不寫
          </convert>

          <creator>標(biāo)簽負(fù)責(zé)公開用于Web遠(yuǎn)程的類和類的方法,<convertor>標(biāo)簽則負(fù)責(zé)這些方法的參數(shù)和返回類型。convert元素的作用是告訴DWR在服務(wù)器端Java 對(duì)象表示和序列化的JavaScript之間如何轉(zhuǎn)換數(shù)據(jù)類型

          這樣在js端回調(diào)函數(shù)直接拿到的data就是一個(gè)javabean,可以直接通過data.xxx拿到bean的屬性xxx。


          調(diào)用有JavaBean參數(shù)java方法

          dwr.xml配置同上。

          在JS端,把要傳入的參數(shù)寫成javabean方式,例:要傳入一個(gè)名為student的javabean,參數(shù)有name,password,則
          var stu = {name:"zhangsan",password:"zspassword"}; //這是json的表示方法
          AAA.bbb(stu,callBack);


          調(diào)用返回ListSet或者Mapjava方法

          dwr.xml配置同上。如果Collection里的數(shù)據(jù)是簡(jiǎn)單數(shù)據(jù)類型,則可不需要寫<convert>

          在JS端,以List,里面數(shù)據(jù)是bean為例,data是一個(gè)List型,只要用for循環(huán)就可以依次拿到數(shù)據(jù)。
          遍歷方法1:
          for(var i=0;i<data.length;i++) 
              /*
          對(duì)于java方法的返回值為L(zhǎng)ist(Set)的情況,DWR將其轉(zhuǎn)                                 化為Object數(shù)組,傳遞個(gè)javascript*/
          {
              alert(data[i].name+":"+data[i].password);
          }

          遍歷方法2:
          for(var
          property in data) //property為序號(hào),從0開始
          {

              var bean = data[
          property];
              alert(bean.name+":"+bean.password);
          }

          相比返回為javabean多了一個(gè)遍歷而已。

          如果java方法的返回值為Map,則如下

          for(var property in data) //property為key值
              /*對(duì)于 java方法的返回值為Map的情況,DWR將其轉(zhuǎn)化為一個(gè)Object,
               其中Object的屬性為原Map的key值,屬性值為原Map相應(yīng)的 value值*/
          {
            var bean = data[property];
            alert(bean.username);
            alert(bean.password);
          }

          如果知道key值,則可直接用:data.key拿到value


          調(diào)用有ListSet或者Map參數(shù)的java方法

          在dwr.xml的<dwr>標(biāo)簽內(nèi)加入:<signatures>標(biāo)簽。

          <signatures>標(biāo)簽是用來聲明java方法中List、Set或者M(jìn)ap參數(shù)所包含的確切類,以便java代碼作出判斷,是js-->java的。

          例參數(shù)是javabean的List,則只要在參數(shù)為javabean的例子里構(gòu)造時(shí)候加上[]即可,如下:

          var stu = [{name:"zhangsan",password:"zspassword"},{name:"lisi",password:"lspassword"}];
          //把List當(dāng)作數(shù)組來處理
          AAA.bbb(stu,callBack);

          并且在dwr.xml中增加如下的配置段(剛才試驗(yàn)了下,不加也可以)

          <signatures>
           <![CDATA[
            import java.util.List;
            import com.dwr.AAA;     //AAA的包路徑要寫完整
            import com.dwr.TestBean;  //javabean
            AAA.bbb(List<TestBean>);
           ]]>
          </signatures>


          例參數(shù)是javabean的Map,key是String,value是javabean,如下:
          var stu =
          {
              "key1":{name:"zhangsan",password:"zspassword"},
              "key2":{name:"lisi",password:"lspassword"}
          };
          AAA.bbb(stu,callBack);

          并且在dwr.xml中增加如下的配置段(剛才試驗(yàn)了下,不加也可以)

          <signatures>
           <![CDATA[
            import java.util.List;
            import com.dwr.AAA;     //AAA的包路徑要寫完整
            import com.dwr.TestBean;  //javabean
            AAA.bbb(Map<String,TestBean>);
           ]]>
          </signatures>

          posted on 2008-03-04 22:29 xyz 閱讀(453) 評(píng)論(0)  編輯  收藏 所屬分類: 網(wǎng)絡(luò)文摘

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          留言簿

          隨筆檔案(1)

          文章分類(44)

          文章檔案(46)

          收藏夾(1)

          Adobe

          AOP

          API

          appServer

          BI

          c

          • c-free
          • codeblocks
          • codelite
          • CodeLite IDE 是一個(gè)強(qiáng)大的開源,跨平臺(tái)的 C/C++整合開發(fā)環(huán)境. 支持包括 Windows、Linux 和 Mac 系統(tǒng)下運(yùn)行
          • codelite官網(wǎng)
          • dev-c++
          • Dev-C++是一個(gè)C&C++開發(fā)工具,它是一款自由軟件,遵守GPL協(xié)議。
          • GCC
          • GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因?yàn)樗局荒芴幚?C語言。GCC 很快地?cái)U(kuò)展,變得可處理 C++。之后也變得可處理 Fortran、Pascal、Objective-C、Java, 以及 Ada 與其他語言。

          Cache

          CMS

          DB

          eclipse

          FreeMarker

          hibernate

          html5

          ibatis

          java

          jquery

          js

          json

          Linux

          Log

          mail server

          mobile

          mysql

          oauth

          openID

          other

          PHP

          portal

          report

          Scheduler

          schema

          Security

          SOA

          spring

          struts

          UI原型設(shè)計(jì)

          w3c

          Wap

          webservice

          xml

          供應(yīng)鏈管理

          博客鏈接

          好網(wǎng)站

          工作流

          開源網(wǎng)

          招聘

          插件下載

          操作系統(tǒng)

          構(gòu)建可伸縮的系統(tǒng)

          構(gòu)建工具

          測(cè)試

          • IETest
          • IE官網(wǎng)
          • OpenSTA
          • Siege
          • Siege是一個(gè)壓力測(cè)試和評(píng)測(cè)工具,設(shè)計(jì)用于WEB開發(fā)這評(píng)估應(yīng)用在壓力下的承受能力

          游戲

          源碼托管

          經(jīng)營(yíng)

          資源

          金融/財(cái)務(wù)

          搜索

          •  

          最新評(píng)論

          主站蜘蛛池模板: 宜宾市| 江永县| 长宁区| 灵丘县| 波密县| 甘德县| 治县。| 潜江市| 资中县| 易门县| 唐山市| 无极县| 西乡县| 昆明市| 南华县| 绥宁县| 确山县| 依兰县| 哈尔滨市| 且末县| 仙桃市| 怀远县| 威宁| 定结县| 故城县| 昭平县| 通许县| 永泰县| 平陆县| 青铜峡市| 清丰县| 龙海市| 朔州市| 武陟县| 武功县| 吉木乃县| 鄄城县| 谢通门县| 洛阳市| 威海市| 阳西县|