欢迎来到阿八个人博客网站。本
阿八个人博客
网站提供最新的站长新闻,各种互联网资讯。
喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术!
URL链接:https://www.abboke.com/xwzhj/2019/0611/363.html
今天,总结下FreeMarker生成HTML模板。
模板文件
这个template.ftl是freemarker的ftl模板文件,freemarker会解析这个文件,然后才生成HMTL文件。
${person.title}
${person.time}
${person.name}
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, Mapdata) {
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;
}
}