freemarker生成静态文件时使用freemarker.properties配置文件
? 在struts2与freemarker整合时,可以在项目的类路径下放置freemarker.properties配置文件,
struts2会自动读取(struts2封装了)。今天用freemarker作为模板生成静态文件时,发现并不读取freemarker.properties配置文件。
看一下freemarker源码,freemarker本身并不加载freemarker.properties配置文件,需要代码中指定配置文件。
代码如下:
?
package com.ldl.freemarker;import java.io.BufferedWriter;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.HashMap;import java.util.Map;import java.util.Properties;import freemarker.cache.ClassTemplateLoader;import freemarker.template.Configuration;import freemarker.template.DefaultObjectWrapper;import freemarker.template.Template;import freemarker.template.TemplateException;public class freemarkerTest {/** * @param args * @throws IOException * @throws TemplateException */@SuppressWarnings("unchecked")public static void main(String[] args) throws IOException, TemplateException {Configuration cfg = new Configuration();cfg.setTemplateLoader(new ClassTemplateLoader(freemarkerTest.class,""));cfg.setObjectWrapper(new DefaultObjectWrapper());//加载并设置freemarker.propertiesProperties p = new Properties();p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("freemarker.properties"));cfg.setSettings(p);/* 在整个应用的生命周期中,这个工作你可以执行多次 *//* 获取或创建模板*/Template temp = cfg.getTemplate("test.xml");/* 创建数据模型 */Map root = new HashMap();root.put("user", "Big Joe");/* 将模板和数据模型合并 */Writer out = new BufferedWriter(new OutputStreamWriter(System.out));temp.process(root, out);out.flush();}}
?测试代码在附件中,freemarker.properties里的default_encoding值为utf-8,看控制台打印的是否有乱码,如果有乱码说明生效了。