FreeMarker-页面静态化技术

使用FreeMarker生成一个简单的模板

在这里记录下一个比较好用的java模板引擎-FreeMarker

如果项目的某个页面需要展示不同的信息,使用ajax技术能够做到,

但是每次打开页面都会向数据库请求数据,十分浪费资源,于是出现了FreeMarker模板技术.

通过不同的信息生成不同的页面,每次打开相应的静态页面,使页面加载速度得到保证

简单来说我们需要通过一个模板来生成页面,页面中又包含不同的数据,所以先创建一个模板

FreeMarker的模板时ftl格式,里面的内容根据html修改,那么就开始吧

创建模板:把准备好的html后缀改为ftl格式,这里以hello.html为例
1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--这就是我们要改动的-->
hello world
</body>
</html>
将hello.html改名为hello.ftl,我们的目标是将hello world改成我们想要的数据,并且生成页面文件
编写java代码
1
2
3
4
5
6
7
8
9
10
11
12
13
//创建模板技术的核心配置对象
Configuration cfg = new Configuration(Configuration.VERSION_2_3_28);
//加载模板的路径位置即hello.ftl
cfg.setDirectoryForTemplateLoading(new File("模板路径"));
//设置编码
cfg.setDefaultEncoding("UTF-8");
//准备数据 数据可以为对象,也可以为Map
Map<String,String> map = new HashMap<>();
map.put("context","你好,世界")
//获取指定的模板
Template template = cfg.getTemplate("hello.ftl");
//合并模板
template.process(map, new FileWriter(new File("最终文件路径")));
代码解释:通过加载模板文件来生成html页面文件
修改模板,模板中可以通过EL表达式取值
1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--这就是改动后的-->
${context}
</body>
</html>
因为在java中我们在map添加了(key:context,value:你好,世界),所以这里生成的页面中得到的效果即为
1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
你好,世界
</body>
</html>
这样就通过模板生成了一个简单的页面,在实际开发中我们还会用到FreeMarker的一些其他语法,这里说一下基本语法IF以及遍历
条件
1
2
3
4
5
6
7
8
9
<#if (age>20&&age<=50)>
要多奋斗啊。。
<#elseif (age>=0&&age<=20)>
你还年亲,可以多玩玩
<#elseif (age>50&&age<=85)>
寿比南山
<#else>
人生赢家
</#if>
遍历
1
2
3
<#list strs as s>
${s}
</#list>

Comments: