什么是 FreeMarker
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
FreeMarker使用
1、新建一个Maven工程,引入依赖
1 <!-- freemarker --> 2 <dependency> 3 <groupId>org.freemarker</groupId> 4 <artifactId>freemarker</artifactId> 5 <version>2.3.28</version> 6 </dependency>
2、在src/main/resources/templates目录下新建模板-test.ftl
<html> <head> <title>Welcome!</title> </head> <body> <h1>Welcome ${user}!</h1> <p>Our latest product: <a href="${latestProduct.url}">${latestProduct.name}</a>! </body> </html>
3、编辑测试类
1 package com.test.freemarker; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.OutputStreamWriter; 6 import java.io.Writer; 7 import java.util.HashMap; 8 import java.util.Map; 9 10 import freemarker.template.Configuration; 11 import freemarker.template.Template; 12 import freemarker.template.TemplateExceptionHandler; 13 14 public class Test { 15 16 private static final String TEMPLATE_PATH = "src/main/resources/templates"; 17 18 public static void main(String[] args) throws IOException { 19 // step1 创建freeMarker配置实例 20 // 创建freeMarker配置实例 21 Configuration cfg = new Configuration(Configuration.VERSION_2_3_28); 22 // 获取模版路径 23 cfg.setDirectoryForTemplateLoading(new File(TEMPLATE_PATH)); 24 // 设置默认编码格式 25 cfg.setDefaultEncoding("UTF-8"); 26 // 设置异常处理器 27 cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); 28 29 Writer out = null; 30 try { 31 // step2 创建数据模型 32 Map root = new HashMap(); 33 root.put("user", "Big Joe"); 34 Map latest = new HashMap(); 35 root.put("latestProduct", latest); 36 latest.put("url", "products/greenmouse.html"); 37 latest.put("name", "green mouse"); 38 39 // step3 加载模版文件 40 Template temp = cfg.getTemplate("test.ftl"); 41 42 // step4 生成数据 43 out = new OutputStreamWriter(System.out); 44 temp.process(root, out); 45 46 } catch (Exception e) { 47 e.printStackTrace(); 48 } finally { 49 try { 50 if (null != out) { 51 out.flush(); 52 } 53 } catch (Exception e2) { 54 e2.printStackTrace(); 55 } 56 } 57 } 58 }
4、运行,结果如下: