Nomad & His Life

          博觀而約取,厚積而薄發(fā)
          posts - 15, comments - 88, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          公告

          歡迎訪問:http://www.jialing.net
          Q我!

          積分與排名

          • 積分 - 38361
          • 排名 - 1199

          最新評(píng)論

          選DWR,還是A4J,這是一個(gè)問題

          Posted on 2006-08-10 08:58 Nomad 閱讀(3589) 評(píng)論(14)  編輯  收藏 所屬分類: Java
          原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明作者:Nomad,出處: www.jialing.net

          ??? 在網(wǎng)上找了一圈Ajax的Java框架,感覺不錯(cuò)的只有兩個(gè),一個(gè)是被提到比較多的DWR(Direct Web Remoting),另一個(gè)是剛剛1.0的Ajax4JSF。本文先用代碼說話,各用兩個(gè)框架開發(fā)同樣功能的Ajax輸入驗(yàn)證的小程序。在最后表達(dá)一下鄙人對(duì)這兩個(gè)框架的淺見。

          ·程序功能

          ??? 頁面上有兩個(gè)輸入框,一個(gè)填用戶名,一個(gè)填密碼。兩個(gè)框空著時(shí)提示“請(qǐng)?zhí)顚憽保挥脩裘址L(zhǎng)度小于3時(shí)提示“長(zhǎng)度應(yīng)大于3”;當(dāng)用戶名是“root”,密碼是“123”時(shí)提示密碼正確,否則提示密碼錯(cuò)誤。

          ·DWR的實(shí)現(xiàn)
          ??? Java邏輯: 這是提供給頁面異步調(diào)用的Java代碼

          ?1?package?net.jialing;
          ?2?
          ?3?public?class?ValidateBean?{
          ?4?
          ?5?????public?String?checkName(String?name)?{
          ?6?????????if(name?==?null?||?name.equals(""))?return?"請(qǐng)?zhí)钊胗脩裘?/span>";
          ?7?????????
          ?8?????????if(name.length()<3)?return?"用戶名長(zhǎng)度須大于3";
          ?9?????????
          10?????????return?"";
          11?????}
          12?
          13?????public?String?checkPwd(String?name,String?password)?{
          14?????????if(password?==?null?||?password.equals(""))?return?"請(qǐng)?zhí)钊朊艽a";
          15?????????
          16?????????if(name?!=?null?&&?password?!=?null)?{
          17?????????????if(name.equals("root")?&&?password.equals("123"))
          18?????????????????return?"密碼正確!";
          19?????????????else
          20?????????????????return?"密碼不正確!";
          21?????????}
          22?????????
          23?????????return?"";
          24?????}
          25?
          26?}



          ??? DWR的配置:

          <dwr>
          ??
          <allow>
          ????
          <create?creator="new"?javascript="JValidate">
          ????????
          <param?name="class"?value="net.jialing.ValidateBean"/>
          ????
          </create>
          ??
          </allow>
          </dwr>



          ??? JSP頁面:在頁面中寫了四個(gè)函數(shù)來調(diào)用各自的Java驗(yàn)證代碼。

          <%@?page?contentType="text/html;?charset=gb2312"?language="java"?errorPage=""?%>
          <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">
          <html>
          <head>
          <meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312">
          <title>Struts?+?DWR?AJAX?Validation</title>
          <script?type='text/javascript'?src='dwr/engine.js'></script>
          <script?type='text/javascript'?src='dwr/util.js'></script>
          <script?type='text/javascript'?src='dwr/interface/JValidate.js'></script>
          <script>
          function?changeName()?{
          ????
          var?name?=?document.getElementById("name").value;
          ????JValidate.checkName(name,validateName);
          }

          function?validateName(data)?{
          ????document.getElementById(
          "name_message").innerHTML?=?data;
          }

          function?changePwd()?{
          ????
          var?name?=?document.getElementById("name").value;
          ????
          var?pwd?=?document.getElementById("password").value;
          ????JValidate.checkPwd(name,pwd,validatePwd);
          }

          function?validatePwd(data)?{
          ????document.getElementById(
          "password_message").innerHTML?=?data;
          }
          </script>
          </head>
          <body>
          Struts?+?DWR?AJAX?Validation:?
          <br>
          Name:
          <input?name="name"?type="text"?id="name"?onkeyup="changeName()">?<label?id="name_message"></label><br>
          Password:
          <input?name="password"?type="password"?id="password"?onkeyup="changePwd()">?<label?id=?password_message"></label>
          </body>
          </html>

          ?? ?

          ·A4J的實(shí)現(xiàn)

          ??? Java邏輯:這是JSF控制下的JavaBean

          package?net.jialing;

          public?class?ValidateBean?{
          ????
          private?String?name;

          ????
          private?String?password;

          ????
          private?String?name_message;

          ????
          private?String?password_message;

          ????
          public?String?getName()?{
          ????????
          return?name;
          ????}

          ????
          public?void?setName(String?name)?{
          ????????
          this.name?=?name;
          ????}

          ????
          public?String?getName_message()?{
          ????????
          if(name?==?null?||?name.equals(""))?return?"請(qǐng)?zhí)钊胗脩裘?/span>";
          ????????
          ????????
          if(name.length()<3)?return?"用戶名長(zhǎng)度須大于3";
          ????????
          ????????
          return?"";
          ????}

          ????
          public?void?setName_message(String?name_message)?{
          ????????
          this.name_message?=?name_message;
          ????}

          ????
          public?String?getPassword()?{
          ????????
          return?password;
          ????}

          ????
          public?void?setPassword(String?password)?{
          ????????
          this.password?=?password;
          ????}

          ????
          public?String?getPassword_message()?{
          ????????
          if(password?==?null?||?password.equals(""))?return?"請(qǐng)?zhí)钊朊艽a";
          ????????
          ????????
          if(name?!=?null?&&?password?!=?null)?{
          ????????????
          if(name.equals("root")?&&?password.equals("123"))
          ????????????????
          return?"密碼正確!";
          ????????????
          else
          ????????????????
          return?"密碼不正確!";
          ????????}
          ????????
          ????????
          return?"";
          ????}

          ????
          public?void?setPassword_message(String?password_message)?{
          ????????
          this.password_message?=?password_message;
          ????}

          }



          ??? JSF的配置:

          <faces-config>
          <managed-bean>
          ????????
          <managed-bean-name>validate</managed-bean-name>
          ????????
          <managed-bean-class>
          ????????????net.jialing.ValidateBean
          ????????
          </managed-bean-class>
          ????????
          <managed-bean-scope>request</managed-bean-scope>
          ????????
          <managed-property>
          ????????????
          <property-name>name</property-name>
          ????????????
          <null-value/>
          ????????
          </managed-property>
          ????????
          <managed-property>
          ????????????
          <property-name>password</property-name>
          ????????????
          <null-value/>
          ????????
          </managed-property>
          ????????
          <managed-property>
          ????????????
          <property-name>name_message</property-name>
          ????????????
          <null-value/>
          ????????
          </managed-property>
          ????????
          <managed-property>
          ????????????
          <property-name>password_message</property-name>
          ????????????
          <null-value/>
          ????????
          </managed-property>
          </managed-bean>
          </faces-config>



          ??? JSP頁面:

          <%@?page?language="java"?pageEncoding="ISO-8859-1"%>
          <%@?taglib?uri="https://ajax4jsf.dev.java.net/ajax"?prefix="a4j"%>
          <%@?taglib?uri="http://java.sun.com/jsf/html"?prefix="h"?%>
          <%@?taglib?uri="http://java.sun.com/jsf/core"?prefix="f"?%>

          <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
          <html>
          <head>
          ????
          <title>Ajax4JSF?Validate?Page</title>
          </head>
          <body>
          ????
          <f:view>
          ????????This?is?my?Ajax4JSF?Validate?page.?
          <br>
          ????????
          <h:form>
          ????????????Name:
          <h:inputText?id="name"?value="#{validate.name}"?>
          ????????
          <a4j:support?event="onkeyup"?reRender="rename"?/>
          ????????
          </h:inputText>?<h:outputText?id="rename"?value="#{validate.name_message}"?/><br>
          ????????
          ????????????Password:
          <h:inputSecret?id="password"?value="#{validate.password}"?>
          ????????
          <a4j:support?event="onkeyup"?reRender="repwd"?/>
          ??????????
          </h:inputSecret>?<h:outputText?id="repwd"?value="#{validate.password_message}"?/>
          ????????
          </h:form>
          ????
          </f:view>
          </body>
          </html>



          ·對(duì)比


          1.代碼量
          ??? 這是程序員最關(guān)心問題,哪個(gè)框架能減輕我們更多的負(fù)擔(dān)呢。首先看Java代碼,DWR似乎比A4J少一點(diǎn),其實(shí)不然,因?yàn)锳4J是基于JSF的Managed Bean上開發(fā)的,所以Bean里的其它代碼都可以用到JSF其它的地方,所以Java的開發(fā)量是相同的。其次看配置量,A4J稍有一些優(yōu)勢(shì),只要在JSF中配置了就不用在配置,而DWR還需要再配置一個(gè)XML文件。最后看頁面的代碼量,這一點(diǎn)A4J的優(yōu)勢(shì)更加明顯,程序員完全不用寫JavaScript代碼,只需將要異步刷新的地方加入a4j的標(biāo)簽即可。
          ??? 總的來說,在節(jié)省代碼量這個(gè)方面A4J是勝利的。

          2.靈活性
          ??? 這一點(diǎn)DWR是明顯的贏家,DWR適合各種框架,在設(shè)計(jì)時(shí)都考慮到了如Spring、JSF、Struts等的集成。而A4J僅適合JSF框架,對(duì)應(yīng)用范圍做了很大的限制。在集成方面不僅僅是Java框架,還有現(xiàn)在越來越流行的JavaScript框架(如Dojo、Qooxdoo等),因?yàn)锳4J封裝了JavaScript代碼,開發(fā)者無法像DWR一樣可以自由的使用JavaScript。當(dāng)開發(fā)者習(xí)慣于將一些邏輯寫在JavaScipt中時(shí),使用A4J可能會(huì)造成很多的不便。

          3.風(fēng)險(xiǎn)性
          ??? A4J以標(biāo)簽為開發(fā)手段,減去了應(yīng)用程序開發(fā)者在JavaScript和DHTML等方面開發(fā)的時(shí)間,但同時(shí)也可能埋下風(fēng)險(xiǎn)的隱患。在開發(fā)一個(gè)Web應(yīng)用的時(shí)候,開發(fā)者需要全面的評(píng)估應(yīng)用中會(huì)使用到的技術(shù)功能,確定利用A4J可以實(shí)現(xiàn),畢竟這是一個(gè)新成長(zhǎng)起來的框架,需要更加留意。另外在安全方面,兩個(gè)框架都還無從考證。

          4.前景
          ??? DWR在2.0里實(shí)現(xiàn)了Ajax的反轉(zhuǎn),即在Java中執(zhí)行JavaScript代碼,似乎標(biāo)志著一種新的開發(fā)方式。A4J則搭上了JSF這趟快車,各個(gè)大公司都在謀劃著將應(yīng)用開發(fā)進(jìn)一步的分工,上游廠商制定組件,下游的公司使用組件為企業(yè)提供服務(wù),JSF是它們賺錢的一個(gè)好工具,一定會(huì)繼續(xù)推而廣之,而A4J也會(huì)隨著JSF的成長(zhǎng)而成長(zhǎng)。


          ·總結(jié)
          ??? 也許還不到總結(jié)的時(shí)候。我想用DWR還是A4J,可以參考究竟使用Struts還是JSF,DWR的靈活性和Struts是對(duì)應(yīng)的,兩者結(jié)合可以開發(fā)出靈活性很高的程序。A4J則肯定和JSF搭配,JSF的組件樹也可以讓開發(fā)的速度加快。


          ·參考
          DWR:http://getahead.ltd.uk/dwr
          Ajax4jsf: https://ajax4jsf.dev.java.net/

          ·示例下載
          基于DWR的示例:http://www.jialing.net/download/ajax/Struts_DWR_Validate.rar
          基于A4J的示例:http://www.jialing.net/download/ajax/A4J_Validate.rar

          評(píng)論

          # re: 選DWR,還是A4J,這是一個(gè)問題  回復(fù)  更多評(píng)論   

          2006-08-10 19:31 by 坎井之蛙
          呵呵 不錯(cuò)不錯(cuò) 學(xué)習(xí) 仰慕中。。。。,從你這可以學(xué)到許多想要的,3Q

          # re: 選DWR,還是A4J,這是一個(gè)問題  回復(fù)  更多評(píng)論   

          2006-08-10 20:53 by dfjinn
          問一下,/interface/JValidate.js,這個(gè)JS在哪里啊?找不到.

          # re: 選DWR,還是A4J,這是一個(gè)問題  回復(fù)  更多評(píng)論   

          2006-08-10 22:40 by 一農(nóng)
          還有json-rpc-java

          # re: 選DWR,還是A4J,這是一個(gè)問題  回復(fù)  更多評(píng)論   

          2006-08-10 23:41 by 龍卷風(fēng)驛站
          lz,dwr只用來做這些事情就太大才小用了,如果只是驗(yàn)證這些簡(jiǎn)單,沒必要這么搞


          還是結(jié)合spring和hibernate來發(fā)揮dwr的最大功能

          # re: 選DWR,還是A4J,這是一個(gè)問題  回復(fù)  更多評(píng)論   

          2006-08-11 01:25 by 楊一
          很多觀點(diǎn)我并不贊成,然而作者的筆觸很專業(yè)

          # re: 選DWR,還是A4J,這是一個(gè)問題  回復(fù)  更多評(píng)論   

          2006-08-11 08:36 by Nomad
          @dfjinn

          #問一下,/interface/JValidate.js,這個(gè)JS在哪里啊?找不到.

          JValidate是DWR中自動(dòng)生成的對(duì)ValidateBean的映射,用來執(zhí)行ValidateBean的邏輯。
          見:<create creator="new" javascript="JValidate">
          <param name="class" value="net.jialing.ValidateBean"/>
          </create>

          # re: 選DWR,還是A4J,這是一個(gè)問題  回復(fù)  更多評(píng)論   

          2006-08-12 10:35 by 火線生存
          感謝!

          # re: 選DWR,還是A4J,這是一個(gè)問題  回復(fù)  更多評(píng)論   

          2006-09-25 22:59 by 有貓相伴的日子
          不贊成可以討論,我覺得樓主寫得挺可以,他是他的想法,只是把自己的想法寫出來!!!!!!!!!!!!!!!!!!
          DWR 的靈活靈是無可否認(rèn)的,DWR還有很多優(yōu)點(diǎn)是其它AJAX框架所不具有的

          # re: 選DWR,還是A4J,這是一個(gè)問題  回復(fù)  更多評(píng)論   

          2007-05-29 16:18 by liang
          用dwr 一般不和jsf結(jié)全在一起,但與spring結(jié)合在一起
          jsf +spring
          + hibernate
          dwr+spring

          # re: 選DWR,還是A4J,這是一個(gè)問題  回復(fù)  更多評(píng)論   

          2007-05-29 16:20 by liang
          唉上面怎么成那個(gè)樣子呀,
          dwr + jsf + spring + hibernate 我一般不把dwr與jsf結(jié)合,而是dwr與spring, jsf與spring,就是這個(gè)樣子。

          # re: 選DWR,還是A4J,這是一個(gè)問題  回復(fù)  更多評(píng)論   

          2008-08-25 09:29 by libaiyu
          dwr是非常得靈活的,在你的項(xiàng)目中可全部用,也可之在某部分用的都沒問題,還有就是使用暴露的方式非常好,想用哪個(gè)就暴露哪個(gè),這就很好了。對(duì)dwr是很有信心的,ajax實(shí)現(xiàn)必然會(huì)出現(xiàn)一個(gè)進(jìn)化,而dwr模式將是一個(gè)很有希望的方向。對(duì)dwr也有些研究,若大家有什么問題一塊討論。qq:94168424

          # re: 選DWR,還是A4J,這是一個(gè)問題  回復(fù)  更多評(píng)論   

          2008-08-25 09:35 by libaiyu
          # re: 選DWR,還是A4J,這是一個(gè)問題 回復(fù) 更多評(píng)論
          2006-08-11 08:36 by Nomad
          @dfjinn

          #問一下,/interface/JValidate.js,這個(gè)JS在哪里啊?找不到.

          JValidate是DWR中自動(dòng)生成的對(duì)ValidateBean的映射,用來執(zhí)行ValidateBean的邏輯。
          見:<create creator="new" javascript="JValidate">
          <param name="class" value="net.jialing.ValidateBean"/>
          </create>


          在項(xiàng)目中是找不到的,但可以使用在火狐中使用插件firebug來調(diào)試可查看,這個(gè)文件就是暴露的java類的js形式,你用firebug將很容易讀取到頁面中使用的所有js文件,firebug怎么用我在這就不多說了,在firebug主頁上都講的很好了

          # re: 選DWR,還是A4J,這是一個(gè)問題  回復(fù)  更多評(píng)論   

          2008-10-29 14:59 by
          不錯(cuò),正是我想要的東西。。。

          # re: 選DWR,還是A4J,這是一個(gè)問題  回復(fù)  更多評(píng)論   

          2013-01-24 23:04 by Super9527
          謝謝了,樓主,解了我疑惑
          主站蜘蛛池模板: 广西| 赤峰市| 盖州市| 绿春县| 石阡县| 虞城县| 平乡县| 赫章县| 乌审旗| 连城县| 响水县| 太谷县| 独山县| 都兰县| 东丰县| 炎陵县| 泌阳县| 汶川县| 德令哈市| 墨竹工卡县| 尼玛县| 武定县| 巩义市| 利津县| 光山县| 万全县| 江达县| 南昌市| 喀喇沁旗| 吐鲁番市| 蓬溪县| 新巴尔虎左旗| 澄城县| 淮安市| 左贡县| 肇源县| 勐海县| 耿马| 和龙市| 昌宁县| 宁陕县|