在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.properties
- Properties 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();
- }
- }
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.properties Properties 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,看控制台打印的是否有乱码,如果有乱码说明生效了。
时间: 2024-11-03 22:21:02