FreeMarker在网页游戏服务器开发中的应用

 

1.       FreeMarker是什么

 

官方网站解释,FreeMarker是一个模板引擎,基于模板生成任何文本输出(HTML到自动生成的源代码)的通用工具。FreeMarker常用于生成网站页面,我们尝试着用于其它场合。

 

2.       生成战斗录像XML

 

玩过网页游戏的朋友们,一定知道战斗录像的概念,而战斗录像大部分时候都是一些XML文件(以后会专门讲解战斗录像的其它存储方式,既可以方便地做到格式兼容,又可以减少内存、磁盘和网络带宽占用)

 

怎么样更好地生成预定义的XML文件呢?

几种我们曾经用过的方式:

a)         拼接字符串到StringBuilder,最后把一个大字符串输出到文件

b)         dom4j生成Element

 

随着战斗录像表现效果的不断调整,录像文件也需要跟着调整,倘若采用前面两种方式,改起来会麻烦许多。采用FreeMaker之后,录像的格式和录像的数据完全分离,一旦你把数据准备好了,格式随便你改。

 

3.       生成代码

 

程序员都是懒惰的,不喜欢敲击重复的代码。我们把这些重复代码的生成交给工具,既可以降低代码的出错率,又可以提高开发效率。很多地方,我们会用到代码生成,例如:服务器RPC代码、策划数据对应的类文件等等。

 

我们有很多种办法做代码生成,但是FreeMaker是较为方便的。

例如我们通过策划配置的Excel数据生成对应的Java类。

public class ${className} {
<#list properties?keys as prop >
    
private ${properties[prop]} ${prop};
</#list>

<#list properties?keys as prop >
    
public ${properties[prop]} get${prop?cap_first}(){
        
return ${prop};
    }
    
public void set${prop?cap_first}(${properties[prop]} _${prop}){
        
this.${prop} = _${prop};
    }
</#list>    

 

然后通过下面的Java处理模板,生成我们需要的代码:

             Template template = config.getTemplate("test.ftl");

            Map<String, Object> variables = new HashMap<String, Object>();
            variables.put(
"className""TestCodeGen");
            Map
<String, String> properties = new HashMap<String, String>();
            properties.put(
"foo1""int");
            properties.put(
"foo2""String");
            variables.put(
"properties", properties);
            template.process(variables, 
new OutputStreamWriter(System.out));

 

最后的输出

     

 public class TestCodeGen {

    private String foo2;
    
private int foo1;

    
public String getFoo2(){
        
return foo2;
    }
    
public void setFoo2(String _foo2){
        
this.foo2 = _foo2;
    }
    
public int getFoo1(){
        
return foo1;
    }
    
public void setFoo1(int _foo1){
        
this.foo1 = _foo1;
    }
}

 


是不是很容易呢?

 

4.       总结

FreeMarker是一个好东西,我们要灵活运用它,帮助我们提高开发效率。这里感谢南磊同学翻译了FreeMarker中文指南,为我们提供了便捷。有关FreeMarker的更多内容,请参考FreeMarker指南。

posted on 2011-07-10 10:58  "齐柏林飞艇"迷上了"哥特金属"  阅读(294)  评论(0)    收藏  举报

导航