1、FreeMarker实现网页静态化。
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。目前企业中:主要用Freemarker做静态页面或是页面展示。
2、使用freemarker需要的jar。
a)、把下载到的jar包(freemarker-2.3.23.jar)放到webappWEB-INFlib目录下。官方网站:http://freemarker.org/
b)、如果使用的是Maven结构,可在pom.xml中引入以下坐标。
1
2
3
4
5
3、Freemarker原理图。模板 + 数据模型 = 输出
4、freemarker的测试案例如下所示:
1 package com.taotao.freemarker;
2
3 import java.io.File;
4 import java.io.FileWriter;
5 import java.io.IOException;
6 import java.io.Writer;
7 import java.util.HashMap;
8 import java.util.Map;
9
10 import org.junit.Test;
11
12 import freemarker.template.Configuration;
13 import freemarker.template.Template;
14 import freemarker.template.TemplateException;
15
16 /**
17 * freemarker网页静态化
18 *
19 * @ClassName: TaoTaoFreemarker.java
20 * @author: biehl
21 * @since: 2019年9月21日 下午5:46:49
22 * @Copyright: ©2019 biehl 版权所有
23 * @version: 0.0.1
24 * @Description:
25 */
26 public class StaticPageFreemarker {
27
28 @Test
29 public void freemarkerStaticPage() {
30 try {
31 // 1、创建一个模板文件
32 // 2、创建一个Configuration对象
33 Configuration cOnfiguration= new Configuration(Configuration.getVersion());
34
35 // 3、设置模板所在得路径
36 configuration.setDirectoryForTemplateLoading(
37 new File("D:\\eclipse\\workspace_taotao\\taotao-item-web\\src\\main\\webapp\\WEB-INF\\ftl"));
38
39 // 4、设置模板得字符集,一般使用utf-8
40 configuration.setDefaultEncoding("utf-8");
41
42 // 5、使用Configuration对象加载一个模板文件,需要指定模板文件得文件名
43 Template template = configuration.getTemplate("hello.ftl");
44
45 // 6、创建一个数据集,可以是pojo也可以是map,推荐使用map
46 Map data = new HashMap<>();
47 data.put("hello", "hello fremarker!!!");
48
49 // 7、创建一个Writer对象,指定输出文件的路径以及文件名
50 Writer out = new FileWriter(new File("D:\\biehl\\photo\\out\\hello.txt"));
51
52 // 8、使用模板对象的process方法输出文件
53 template.process(data, out);
54
55 // 9、关闭流
56 out.close();
57 } catch (IOException e) {
58 e.printStackTrace();
59 } catch (TemplateException e) {
60 e.printStackTrace();
61 }
62
63 }
64 }
相关文件如下所示:
5、fremarker模板的语法学习。
1 package com.taotao.freemarker;
2
3 import java.io.File;
4 import java.io.FileWriter;
5 import java.io.IOException;
6 import java.io.Writer;
7 import java.util.ArrayList;
8 import java.util.Date;
9 import java.util.HashMap;
10 import java.util.List;
11 import java.util.Map;
12
13 import org.junit.Test;
14
15 import com.taotao.pojo.Student;
16
17 import freemarker.template.Configuration;
18 import freemarker.template.Template;
19 import freemarker.template.TemplateException;
20
21 /**
22 * freemarker网页静态化
23 *
24 * @ClassName: TaoTaoFreemarker.java
25 * @author: biehl
26 * @since: 2019年9月21日 下午5:46:49
27 * @Copyright: ©2019 biehl 版权所有
28 * @version: 0.0.1
29 * @Description:
30 */
31 public class StaticPageFreemarker {
32
33 @Test
34 public void freemarkerStaticPage() {
35 try {
36 // 1、创建一个模板文件
37 // 2、创建一个Configuration对象
38 Configuration cOnfiguration= new Configuration(Configuration.getVersion());
39
40 // 3、设置模板所在得路径
41 configuration.setDirectoryForTemplateLoading(
42 new File("D:\\eclipse\\workspace_taotao\\taotao-item-web\\src\\main\\webapp\\WEB-INF\\ftl"));
43
44 // 4、设置模板得字符集,一般使用utf-8
45 configuration.setDefaultEncoding("utf-8");
46
47 // 5、使用Configuration对象加载一个模板文件,需要指定模板文件得文件名
48 // Template template = configuration.getTemplate("hello.ftl");
49 Template template = configuration.getTemplate("student.ftl");
50
51 // 6、创建一个数据集,可以是pojo也可以是map,推荐使用map
52 Map data = new HashMap<>();
53 data.put("hello", "hello fremarker!!!");
54 Student stu = new Student(1, "小辣椒", 25, "北京市西城区西什库大街31号院");
55 // 注意,对象的key就是模板里面的对应的.前面的对象名称
56 data.put("student", stu);
57
58 // freemarker遍历集合对象
59 List
60 stuList.add(new Student(1008611, "小辣椒1号", 25, "北京市西城区西什库大街30号院"));
61 stuList.add(new Student(1008612, "小辣椒2号", 21, "北京市西城区西什库大街32号院"));
62 stuList.add(new Student(1008613, "小辣椒3号", 22, "北京市西城区西什库大街33号院"));
63 stuList.add(new Student(1008614, "小辣椒4号", 23, "北京市西城区西什库大街34号院"));
64 stuList.add(new Student(1008615, "小辣椒5号", 24, "北京市西城区西什库大街35号院"));
65 stuList.add(new Student(1008616, "小辣椒6号", 20, "北京市西城区西什库大街36号院"));
66 stuList.add(new Student(1008617, "小辣椒7号", 18, "北京市西城区西什库大街31号院"));
67 data.put("stuList", stuList);
68
69 // 日期类型的处理
70 data.put("date", new Date());
71
72 // null值得处理
73 data.put("val", null);
74
75 // 7、创建一个Writer对象,指定输出文件的路径以及文件名
76 Writer out = new FileWriter(new File("D:\\biehl\\photo\\out\\student.html"));
77
78 // 8、使用模板对象的process方法输出文件
79 template.process(data, out);
80
81 // 9、关闭流
82 out.close();
83 } catch (IOException e) {
84 e.printStackTrace();
85 } catch (TemplateException e) {
86 e.printStackTrace();
87 }
88
89 }
90 }
freemarker模板如下所示:
1
2
3
4
5
6
序号 | 学号 | 姓名 | 年龄 | 家庭住址 |
---|---|---|---|---|
${stu_index} | ${stu.id} | ${stu.name} | ${stu.age} | ${stu.address} |
效果如下所示:
6、freemarker与spring整合。由于使用的maven项目,所以引入相应的依赖jar包。
1
2
3
4
5
6
7
8
9
10
在ApplicationContext.xml中添加如下内容:
1
2
3
4
整合代码实现如下所示:
1 package com.taotao.item.controller;
2
3 import java.io.File;
4 import java.io.FileWriter;
5 import java.io.Writer;
6 import java.util.HashMap;
7 import java.util.Map;
8
9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.stereotype.Controller;
11 import org.springframework.web.bind.annotation.RequestMapping;
12 import org.springframework.web.bind.annotation.ResponseBody;
13 import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
14
15 import freemarker.template.Configuration;
16 import freemarker.template.Template;
17
18 /**
19 *
20 * @ClassName: HtmlGenController.java
21 * @author: biehl
22 * @since: 2019年9月26日 下午8:15:01
23 * @Copyright: ©2019 biehl 版权所有
24 * @version: 0.0.1
25 * @Description:
26 */
27 @Controller
28 public class HtmlGenController {
29
30 @Autowired
31 private FreeMarkerConfigurer freeMarkerConfigurer;
32
33 @RequestMapping("/genhtml")
34 @ResponseBody
35 public String genHtml() throws Exception {
36 // 生成静态页面
37 Configuration cOnfiguration= freeMarkerConfigurer.getConfiguration();
38 Template template = configuration.getTemplate("hello.ftl");
39 Map data = new HashMap<>();
40 data.put("hello", "spring freemarker test");
41 Writer out = new FileWriter(new File("D:/test.html"));
42 template.process(data, out);
43 out.close();
44 // 返回结果
45 return "OK";
46 }
47
48 }
待续......