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

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

Posted on 2007-09-29 15:06 狂奔的蜗牛 阅读(814) 评论(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
不错的东西,等着看东西出来。

只有注册用户登录后才能发表评论。


网站导航: