欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

freemarker测试

程序员文章站 2022-07-14 09:54:32
...
在Webwork、Freemarker结合中,Freemarker的Configuration可通过Webwork提供的FreemarkerManager来帮助构造一个实例,往往是通过Listener的方式利用ServletContext实例
来构造。
Freemarker本身只是专注于模板解决方案,所以脱离Web环境依然是可以用作模板格式化的。

private void init() {
config = new Configuration(); //自己构建一个简单的带有默认值的CFG
URL dir = ClassLoader.getSystemResource("template"); //获取装有FTL的目录
File file = new File(dir.getFile());
System.out.println(dir.getFile());
try {
config.setDirectoryForTemplateLoading(file); //设定默认模板目录
} catch (IOException ex) {
ex.printStackTrace();
}
}
// 测试运行
@SuppressWarnings("unchecked")
public void run() {
try {
Map map = new HashMap();
map.put("name", "fish");
map.put("script", "<script>alert('test');</script>");
Template template = config.getTemplate("test.ftl", "utf-8");
//Reader reader = new CharArrayReader("name = ${name} and script= ${script}".toCharArray());
//Template template = new Template("tp1", reader, config);
Writer out = new OutputStreamWriter(System.out);
//Writer out = new CharArrayWriter();
template.process(map, out);
//System.out.println(out.toString());
} catch (Exception ex) {
ex.printStackTrace();
}
}


其中test.ftl放在初始化对应的包下
template/test.ftl
内容:
 the name is ${name}, and the script is ${script}
html: ${script?html}
xml:${script?xml}
js : ${script?js_string}
xml_js : ${script?xml?js_string}
<#function test d t>
<#if d gt t>
<#return ">">
<#else>
<#return "<=">
</#if>
</#function>
3 ${test(3,5)} 5
6 ${test(6,5)} 5

注意,这里是作为文件模板输入了引擎, 同理我们可以通过自己构造Template来实现内存变量的格式化输出、以及能够包装为Reader的任意IO流的输入。
通过template.process(map, out);这个方法可以看到,我们可以给一个任意输出流,可以通过改变实现类实现输出到网络、文件、内存变量等等任意IO流可到达的地方。