使用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);
cfg.setDirectoryForTemplateLoading(new File("模板路径"));
cfg.setDefaultEncoding("UTF-8");
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>
|