网络象棋之三(DWR的应用)

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使用方法就介绍完了。
网络象棋中所使用主要的技术也介绍完了。
由于网络象棋还没有最终完成所以源代码就不放上来了,什么时候我写完了再与大家分享吧。
将来如果还有网络象棋第四帖那么应该就有源代码可下载了。

你可能感兴趣的:(网络象棋之三(DWR的应用))