使用Freemark先导包
<dependency>
<groupId>freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.9</version>
</dependency>
先来一个可以自动生成的类
public static void main(String[] args) throws IOException, TemplateException {
String dir ="E:\\prije\\xiaowu\\TestMyfreemark\\src\\main\\java\\com\\zhangzhi\\TestMain";
//这个dir 是项目的路径扫描是模板和生成的都将在这个包下
Configuration conf = new Configuration();
//加载模板文件(模板的路径)
conf.setDirectoryForTemplateLoading(new File(dir));
// 加载模板
Template template = conf.getTemplate("freemarker-demo.ftl");
// 定义数据
Map root = new HashMap();
root.put("world", "Hello World");//先来个最爱hello world
// 定义输出
Writer out = new FileWriter(dir + "/freemarker.html");
template.process(root, out);
System.out.println("生成成功");
out.flush();
out.close();
}
这个是模板中的内容:可自行添加
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<title>${world}</title>
</head>
<body>
<table>
</body>
</html>
运行后生成的html为
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
</head>
<body>
<table>
</body>
</html>
下面展示一下常用的:集合&类
{
String dir = "E:\\prije\\xiaowu\\TestMyfreemark\\src\\main\\java\\com\\zhangzhi\\TestMain";
Configuration conf = new Configuration();
//加载模板文件(模板的路径)
conf.setDirectoryForTemplateLoading(new File(dir));
// 加载模板
Template template = conf.getTemplate("freemarker-demo.ftl");
// 定义数据
Student stu1 = new Student();
stu1.setId(1);
stu1.setName("一号兄弟");
Student stu2 = new Student();
stu2.setId(2);
stu2.setName("二号兄弟");
List<Student> people = new ArrayList<Student>();
people.add(stu1);
people.add(stu2);
Map root = new HashMap();
root.put("world", "Hello World");
root.put("people",people);
// 定义输出
Writer out = new FileWriter(dir + "/freemarker.html");
template.process(root, out);
System.out.println("生成成功");
out.flush();
out.close();
}
模板内容
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<title>${world}</title>
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<table>
<tr>
<th>编号</th>
<th>名字</th>
</tr>
<#list people as p>
<tr style="color: <#if p_index%2==0>red<#else>blue</#if>">
<td>${p.id}</td>
<td>${p.name}</td>
</tr>
</#list>
</table>
</body>
</html>
生成的结果:
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<title>Hello World</title>
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<table>
<tr>
<th>编号</th>
<th>名字</th>
</tr>
<tr style="color: red">
<td>1</td>
<td>一号兄弟</td>
</tr>
<tr style="color: blue">
<td>2</td>
<td>二号兄弟</td>
</tr>
</table>
</body>
</html>
总结:
FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java 编写,FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,虽然 FreeMarker 具有一些编程的能力,但通常由 Java 程序准备要显示的数据,由FreeMarker 生成页面,通过模板显示准备的数据
FreeMarker 不是一个 Web 应用框架,而适合作为 Web 应用框架一个组件。FreeMarker 与容器无关,因为它并不知道 HTTP 或 Servlet;FreeMarker 同样可以应用于非Web应用程序环境,FreeMarker 更适合作为 Model2 框架(如 Struts)的视图组件,你也可以在模板中使用 JSP标记库。另外,FreeMarker是免费的。
应用场景
比较适合运用在访问量大(或页面数据量大),但是数据很少与后台进行交互(即对实时性要求不是很高的)的页面,比如商品网站上的商品详情页等。