天天看點

FreeMarker生成HTML模闆

FreeMarker生成HTML模闆

發表于 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核心代碼,通過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, "/");

String ftlDirectory = StringUtils.substringBeforeLast(ftlPath, "/");

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) {

} finally{

out.flush();

out.close();

return true;