posts - 11, comments - 7, trackbacks - 0, articles - 1

          網絡象棋之三(DWR的應用)

          Posted on 2007-09-29 15:06 狂奔的蝸牛 閱讀(830) 評論(1)  編輯  收藏
          DWR(Direct Web Remoting)是一個AJAX框架,讓人興奮的是它可以使前臺javascript直接調用后臺java代碼,這使得AJAX開發變得更加簡單。
          當然它的功能遠不止這么多,大家可以從http://getahead.org/dwr了解更多信息。
          下面我以DWR2.0為例,為大家演示DWR在網絡象棋中的應用。
          DWR在網絡象棋中的應用比較多,它們的運行方式都大同小異,在此就不一一展示出來了。
          今天要演示的是每走一步棋時,如何向后臺提交數據,及如何取得返回的數據。
          使項目支持DWR,要做下面幾步。
          1. 從http://getahead.org/dwr下載dwr2.0的jar包,把jar包放在項目的lib目錄下。
          2. 修改web.xml文件,添加如下代碼。
              <servlet>
                     
          <servlet-name>dwr-invoker</servlet-name>
                      
          <servlet-class>
                          org.directwebremoting.servlet.DwrServlet
                      
          </servlet-class>
                      
          <init-param>
                          
          <param-name>debug</param-name>
                          
          <param-value>true</param-value>
                      
          </init-param>
                      
          <init-param>
                          
          <param-name>activeReverseAjaxEnabled</param-name>
                          
          <param-value>true</param-value>
                      
          </init-param>
                      
          <init-param>
                          
          <param-name>
                              initApplicationScopeCreatorsAtStartup
                          
          </param-name>
                          
          <param-value>true</param-value>
                      
          </init-param>
                      
          <init-param>
                          
          <param-name>maxWaitAfterWrite</param-name>
                          
          <param-value>500</param-value>
                      
          </init-param>
                      
          <load-on-startup>3</load-on-startup>
              
          </servlet>
              
          <servlet-mapping>
                      
          <servlet-name>dwr-invoker</servlet-name>
                      
          <url-pattern>/dwr/*</url-pattern>
              
          </servlet-mapping>
          3. 在WEB-INF目錄下創建dwr.xml文件。此文件主要是配置java類的映射。
              dwr.xml內容如下。
              <?xml version="1.0" encoding="UTF-8"?>
              
          <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
              
          <dwr>
                  
          <allow>
                      
          <create javascript="ChessProcessDao" creator="new">
                          
          <param name="class" value="com.chess.dao.ChessProcessDao" />
                      
          </create>
                      
          <convert match="com.chess.entity.ChessStep" converter="bean">
                          
          <param name="include"
                              value
          ="userId,currentStep,chessmanId,gamenameId,previousStep,eatChessman,tableId" />
                      
          </convert>
                  
          </allow>
              
          </dwr>
          4. 在頁面公開類。在頁面中添加如下代碼。
              <script type="text/javascript" src="<%=request.getContextPath()%>/dwr/interface/ChessProcessDao"></script>
          這樣javascript就可以調用ChessProcessDao里的方法了。

          本文中所使用的內個類大致內容如下:
          public class ChessProcessDao{
              
          public ChessStep insertStep(ChessStep chessStep){
                  
          //略,數據庫處理,把每步棋的信息存入數據庫
                  
                  
                  
          return chessStep;
              }
          }

          public class ChessStep {
              
          private int userId = -1;
              
          private String currentStep = null;
              
          private String chessmanId = null;
              
          private String gamenameId = null;
              
          private String previousStep = null;
              
          private String eatChessman = null;
              
          private int tableId = -1;
              
          //略,變量的get和set方法
              
              
          }
          在上篇的mouseUp方法中中添加DWR調用。要注意的是如果類中的方法所接收或返回數據為對象實例,那么必須以JSON(JSON介紹http://www.json.org/json-zh.html)的數據格式傳入數據,
          而且在dwr.xml中還要加入這段代碼,是為了把ChessStep公開給DWR,不然DWR會不認ChessStep類。
          <convert match="com.chess.entity.ChessStep" converter="bean">
              
          <!--把當前類中的屬性暴露給DWR,沒有暴露出來的屬性將不可訪問-->
              
          <param name="include"
                  value
          ="userId,currentStep,chessmanId,gamenameId,previousStep,eatChessman,tableId" />
          </convert>
          修改javascript代碼中的mouseUp()方法:
          function mouseUp(ev){
              
              
              
          if(eatChessman(curTarget)){
                  
                  
                  
          //JSON數據格式
                  var data = {userId:user_id, currentStep:curTarget.id, chessmanId:dragObject.id,
                              gamenameId:gamename_id, previousStep:parentTarget.id, eatChessman:eatObj.id, tableId:table_id};
                  ChessProcessDao.insertStep(data, callbackfunc);    
          //callbackfunc為AJAX回調函數
              }else{
                  
                  
              }
              
              
          }
          //每一個回調函數都有一個data數據變量。
          function callbackfunc(data){
              
          var userId = data.userId;    //可以通過這樣的方式調用傳回的數據
              var ccurrentStep = data.currentStep;
              
              
          }
          最基本的DWR使用方法就介紹完了。
          網絡象棋中所使用主要的技術也介紹完了。
          由于網絡象棋還沒有最終完成所以源代碼就不放上來了,什么時候我寫完了再與大家分享吧。
          將來如果還有網絡象棋第四帖那么應該就有源代碼可下載了。

          Feedback

          # re: 網絡象棋之三(DWR的應用)  回復  更多評論   

          2007-09-29 21:24 by cocobear
          不錯的東西,等著看東西出來。

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


          網站導航:
           
          主站蜘蛛池模板: 永康市| 扶绥县| 且末县| 秦皇岛市| 绥滨县| 邻水| 闽侯县| 深泽县| 新密市| 上林县| 临沧市| 永靖县| 搜索| 介休市| 淮安市| 濮阳县| 福泉市| 天等县| 大足县| 延津县| 杭锦后旗| 南涧| 昌江| 广饶县| 洪江市| 六安市| 崇礼县| 荔浦县| 太仓市| 三台县| 闵行区| 吉木萨尔县| 仁化县| 庆城县| 牙克石市| 神木县| 西藏| 额尔古纳市| 黔江区| 瓮安县| 西贡区|