以下是简单的FreeMarker示例,直接采用的方式。示例中是Application的项目,主要用于展示模板输出HTML文件的功能。
示例:
1、引入POM依赖
org.freemarker freemarker 2.3.26-incubating
2、新建test.ftl文件
Welcome! Welcome ${user}<#if user == "Big Joe">, our beloved leader !
3、新建FreeMarkerUtil.java类用于生成通过ftl模板生成html文件
package com.jsoft.testfreemarker.test1;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.net.URISyntaxException;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;public class FreeMarkerUtil { /** * 获取模板 * * @param name * @return */ public Template getTemplate(String name) { try { // 通过FreeMarker的Configuration读取相应的ftl Configuration cfg = new Configuration(); // 设定去哪里读取相应的ftl模板文件 cfg.setClassForTemplateLoading(this.getClass(),"/"); // 在模板文件目录中找到名称为name的文件 Template temp = cfg.getTemplate(name); return temp; } catch (IOException e) { e.printStackTrace(); } return null; } /** * 输出到控制台 * * @param name * 模板文件名 * @param root */ public void print(String name, Maproot) { try { // 通过Template可以将模板文件输出到相应的流 Template temp = this.getTemplate(name); temp.process(root, new PrintWriter(System.out)); } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 输出到文件 * * @param name * @param root * @param outFile */ public void fprint(String name, Map root, String outFile) { FileWriter out = null; try { // 通过一个文件输出流,就可以写到相应的文件中 try { out = new FileWriter(new File(App.class.getResource("/").toURI().getPath() + outFile)); } catch (URISyntaxException e) { // TODO Auto-generated catch block e.printStackTrace(); } Template temp = this.getTemplate(name); temp.process(root, out); } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } finally { try { if (out != null) out.close(); } catch (IOException e) { e.printStackTrace(); } } }}
4、生成后的html内容:
Welcome! Welcome Big Joe, our beloved leader!
测试工程:
总结:
1、其实这个例子是在Application基础上展示生成的html文件的,但实际项目不应该是这样去做,而是结合Servlet、Spring、Status这些框架进行开发。