FreeMarker生成HTML模板

FreeMarker生成HTML模板

发表于 2014-01-09 | Java技术 | FreeMarker

文章目录

  1. 1. 模板文件
  2. 2. Java代码

今天,总结下FreeMarker生成HTML模板。

模板文件

这个template.ftl是freemarker的ftl模板文件,freemarker会解析这个文件,然后才生成HMTL文件。

 
  1. <html>
  2. <head>
  3. <title></title>
  4. </head>
  5. <body>
  6. <h1>${person.title}</h1>
  7. <h2>${person.time}</h2>
  8. <p>${person.name}</p>
  9. </body>
  10. </html>

Java代码

Java核心代码,通过createHTMLFile方法解析FTL文件,并生成HTML文件。

 
  1. package com.lianggzone.freemarker;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.OutputStreamWriter;
  7. import java.io.Writer;
  8. import java.util.HashMap;
  9. import java.util.Locale;
  10. import java.util.Map;
  11. import org.apache.commons.lang.StringUtils;
  12. import freemarker.template.Configuration;
  13. import freemarker.template.Template;
  14. import freemarker.template.TemplateException;
  15. /**
  16. * 测试FreeMarker生成HTML模板
  17. * @author LiangGzone
  18. * @version 2014-01-08
  19. */
  20. public class FreeMarkerTest {
  21. public static void main(String[] args) throws IOException {
  22. FreeMarkerTest test = new FreeMarkerTest();
  23. PersonBean person = new PersonBean();
  24. Map map = new HashMap();
  25. person.loadData();
  26. map.put("person", person);
  27. boolean flag = test.createHTMLFile("d:/liang/template.ftl","d:/liang/template.html", map);
  28. }
  29. /**
  30. * 根据ftl模板文件,生成静态HTML文件
  31. * @param ftlPath FTL模板文件路径,例如["c:/liang/template.ftl"]
  32. * @param filePath 生成HMTL文件路径,例如["d:/liang/lianggzone.html"]
  33. * @param data Map数据
  34. * @return
  35. */
  36. public boolean createHTMLFile(String ftlPath, String filePath, Map data) {
  37. Writer out = null;
  38. //获取HMTL文件目录
  39. String fileDirectory = StringUtils.substringBeforeLast(filePath, "/");
  40. //获取HMTL文件名
  41. String fileName = StringUtils.substringAfterLast(filePath, "/");
  42. //获取HMTL文件目录
  43. String ftlDirectory = StringUtils.substringBeforeLast(ftlPath, "/");
  44. //获取HMTL文件名
  45. String ftlName = StringUtils.substringAfterLast(ftlPath, "/");
  46. try {
  47. //文件递归创建生成文件目录
  48. File realDirectory = new File(fileDirectory);
  49. if (!realDirectory.exists()) {
  50. realDirectory.mkdirs();
  51. }
  52. //step1 获取freemarker的配置
  53. Configuration freemarkerCfg = new Configuration();
  54. //step2 设置freemarker模板所放置的位置(文件夹)
  55. freemarkerCfg.setDirectoryForTemplateLoading(new File(ftlDirectory));
  56. //step3 设置freemarker模板编码
  57. freemarkerCfg.setEncoding(Locale.getDefault(), "GBK");
  58. //step4 找到对应freemarker模板并实例化
  59. Template template = freemarkerCfg.getTemplate(ftlName);
  60. //step5 初始化一个IO流
  61. out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(filePath)), "GBK"));
  62. //step6 模板渲染出所要的内容
  63. template.process(data, out);
  64. } catch (TemplateException e) {
  65. e.printStackTrace();
  66. return false;
  67. } catch (IOException e) {
  68. e.printStackTrace();
  69. return false;
  70. } finally{
  71. try {
  72. out.flush();
  73. out.close();
  74. } catch (IOException e) {
  75. e.printStackTrace();
  76. }
  77. }
  78. return true;
  79. }
  80. }

猜你喜欢

转载自blog.csdn.net/weixin_41722928/article/details/88738432