FreeMarker在网页游戏服务器开发中的应用
1. FreeMarker是什么
按官方网站解释,FreeMarker是一个模板引擎,基于模板生成任何文本输出(从HTML到自动生成的源代码)的通用工具。FreeMarker常用于生成网站页面,我们尝试着用于其它场合。
2. 生成战斗录像XML
玩过网页游戏的朋友们,一定知道战斗录像的概念,而战斗录像大部分时候都是一些XML文件(以后会专门讲解战斗录像的其它存储方式,既可以方便地做到格式兼容,又可以减少内存、磁盘和网络带宽占用)。
怎么样更好地生成预定义的XML文件呢?
几种我们曾经用过的方式:
a) 拼接字符串到StringBuilder,最后把一个大字符串输出到文件
b) 用dom4j生成Element
随着战斗录像表现效果的不断调整,录像文件也需要跟着调整,倘若采用前面两种方式,改起来会麻烦许多。采用FreeMaker之后,录像的格式和录像的数据完全分离,一旦你把数据准备好了,格式随便你改。
3. 生成代码
程序员都是懒惰的,不喜欢敲击重复的代码。我们把这些重复代码的生成交给工具,既可以降低代码的出错率,又可以提高开发效率。很多地方,我们会用到代码生成,例如:服务器RPC代码、策划数据对应的类文件等等。
我们有很多种办法做代码生成,但是FreeMaker是较为方便的。
例如我们通过策划配置的Excel数据生成对应的Java类。
<#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");
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 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) 收藏 举报
浙公网安备 33010602011771号