发表于 2014-01-09 | Java技术 | FreeMarker
文章目录
- 1. 模板文件
- 2. Java代码
今天,总结下FreeMarker生成HTML模板。
模板文件
这个template.ftl是freemarker的ftl模板文件,freemarker会解析这个文件,然后才生成HMTL文件。
- <html>
- <head>
- <title></title>
- </head>
- <body>
- <h1>${person.title}</h1>
- <h2>${person.time}</h2>
- <p>${person.name}</p>
- </body>
- </html>
Java代码
Java核心代码,通过createHTMLFile方法解析FTL文件,并生成HTML文件。
- package com.lianggzone.freemarker;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.io.Writer;
- import java.util.HashMap;
- import java.util.Locale;
- import java.util.Map;
- import org.apache.commons.lang.StringUtils;
- import freemarker.template.Configuration;
- import freemarker.template.Template;
- import freemarker.template.TemplateException;
- /**
- * 测试FreeMarker生成HTML模板
- * @author LiangGzone
- * @version 2014-01-08
- */
- public class FreeMarkerTest {
- public static void main(String[] args) throws IOException {
- FreeMarkerTest test = new FreeMarkerTest();
- PersonBean person = new PersonBean();
- Map map = new HashMap();
- person.loadData();
- map.put("person", person);
- boolean flag = test.createHTMLFile("d:/liang/template.ftl","d:/liang/template.html", map);
- }
- /**
- * 根据ftl模板文件,生成静态HTML文件
- * @param ftlPath FTL模板文件路径,例如["c:/liang/template.ftl"]
- * @param filePath 生成HMTL文件路径,例如["d:/liang/lianggzone.html"]
- * @param data Map数据
- * @return
- */
- public boolean createHTMLFile(String ftlPath, String filePath, Map data) {
- Writer out = null;
- //获取HMTL文件目录
- String fileDirectory = StringUtils.substringBeforeLast(filePath, "/");
- //获取HMTL文件名
- String fileName = StringUtils.substringAfterLast(filePath, "/");
- //获取HMTL文件目录
- String ftlDirectory = StringUtils.substringBeforeLast(ftlPath, "/");
- //获取HMTL文件名
- String ftlName = StringUtils.substringAfterLast(ftlPath, "/");
- try {
- //文件递归创建生成文件目录
- File realDirectory = new File(fileDirectory);
- if (!realDirectory.exists()) {
- realDirectory.mkdirs();
- }
- //step1 获取freemarker的配置
- Configuration freemarkerCfg = new Configuration();
- //step2 设置freemarker模板所放置的位置(文件夹)
- freemarkerCfg.setDirectoryForTemplateLoading(new File(ftlDirectory));
- //step3 设置freemarker模板编码
- freemarkerCfg.setEncoding(Locale.getDefault(), "GBK");
- //step4 找到对应freemarker模板并实例化
- Template template = freemarkerCfg.getTemplate(ftlName);
- //step5 初始化一个IO流
- out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(filePath)), "GBK"));
- //step6 模板渲染出所要的内容
- template.process(data, out);
- } catch (TemplateException e) {
- e.printStackTrace();
- return false;
- } catch (IOException e) {
- e.printStackTrace();
- return false;
- } finally{
- try {
- out.flush();
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- return true;
- }
- }