package message.template.resource; import freemarker.template.*; import message.utils.FileUtils; import message.utils.StringUtils; import java.io.*; import java.util.Locale; import java.util.Map; /** * Freemarker模板引擎生成的Resource<br/>. * * @author sunhao(sunhao.java@gmail.com) * @version V1.0, 14-9-1 上午12:18 */ public class FreemarkerTemplateResource extends AbstractTemplateResource { public FreemarkerTemplateResource(String template, Map<String, String> context) { super(template, context, "resource load by Freemarker!"); } @Override public String renderTemplate() { String result = StringUtils.EMPTY; StringWriter stringWriter = new StringWriter(); BufferedWriter writer = new BufferedWriter(stringWriter); try { Configuration conf = new Configuration(); //设置编码 conf.setEncoding(Locale.getDefault(), "UTF-8"); conf.setDirectoryForTemplateLoading(this.getFolder()); //加载freemarker模板文件 conf.setObjectWrapper(new DefaultObjectWrapper()); //设置对象包装器 conf.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER); //设计异常处理器 Template template = conf.getTemplate(this.getFileName()); //设置编码 template.setEncoding("UTF-8"); //最后开始生成 template.process(super.context, writer); result = stringWriter.toString(); } catch (Exception e) { e.printStackTrace(); } finally { try { writer.flush(); writer.close(); } catch (IOException e) { } } return result; } private File getFolder(){ return new File(super.template).getParentFile(); } private String getFileName(){ File file = new File(super.template); return FileUtils.getFileName(file) + "." + FileUtils.getFileExt(file); } }