一:概述
web应用如果使用和jsp作为数据展示的模板,当此应用运行之后,会将对应的jsp页面翻译为对应的java文件,也就是servlet。相对于html而言,html这种静态页面不用翻译直接访问速度就很快。如何解决jsp编译为java文件然后再响应的问题?
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。目前企业中:主要用Freemarker做静态页面或是页面展示,
原理:
官网地址:
什么是 FreeMarker? - FreeMarker 中文官方参考手册
二:Freemarker的Helloworld
新建一个web工程,完整的工程目录结构如下
使用freemarker需要引入jar包
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency>
首先要创建ftl模板文件
在webapp目录下新建ftls文件夹(名称以及存放的位置任意)存放Freemarker的模板
创建hello.ftl模板文件,(freemarker对于拓展名是没有要求的。通常使用ftl作为扩展名)输入如下内容下面要替换的内容
<html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> </head> <body> 测试:${hello} </body> </html>
其中的${hello}是Freemarker的语法标签。Freemarker会将这个标签替换为程序中指定的内容。
测试方法
@Test public void testDemo() throws Exception { // 第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。 Configuration configuration = new Configuration(Configuration.getVersion()); // 第二步:设置模板文件所在的路径。 configuration.setDirectoryForTemplateLoading(new File("D:/workspaces/freemarker-test/src/main/webapp/WEB-INF/ftl")); // 第三步:设置模板文件使用的字符集。一般就是utf-8. configuration.setDefaultEncoding("utf-8"); // 第四步:加载一个模板,创建一个模板对象。 Template template = configuration.getTemplate("hello.ftl"); // 第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。 Map dataModel = new HashMap<>(); //向数据集中添加数据 dataModel.put("hello", "this is my first freemarker test."); // 第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。 Writer out = new FileWriter(new File("D:/temp/term197/out/hello.html")); // 第七步:调用模板对象的process方法输出文件。 template.process(dataModel, out); // 第八步:关闭流。 out.close(); }
三:freemarker模板语法
1.访问map中的key
${key}
2.访问POJO中的属性
${stu.id}-
${stu.name}
其中stu是pojo对象对应的key:这个对象还是放在map中传递过去的
3.取集合中的数据
循环使用格式:
<#list 要循环的数据 as 循环后的数据>
</#list>
实例如下
取循环中的下标
<#list studentList as student>
${student_index}
</#list>
4.判断
<#if student_index % 2 == 0> 我是if <#else> 我是else </#if>
实例
5.日期
${date?date} 2016-9-13 ${date?time} 17:53:55 ${date?datetime} 2016-9-13 17:53:55 ${date?string("yyyy/MM/dd")}
date是属性名
dataModel.put("date",new Date());
6.Null值的处理
如果模板中引用的key不存在,会报异常,用${key!}代表空字符串
处理: ${aaa!"默认值"}或者${aaa!}代表空字符串
7.include
一个ftl模板中可以引用另一个模板
<#include "模板名">
如:
<#include "hello.ftl">
四:Springboot整合freemarker
详见
Springboot整合freemarker_程序三两行的博客-CSDN博客_springboot+freemarker
参考
尚学堂FreeMarker视频教程
【尚学堂】【FreeMarker视频教程】_免费高速下载|百度网盘-分享无限制
FreeMarker的教程-代码生成器实战
2019JAVA最新FreeMarker的教程-代码生成器实战_哔哩哔哩_bilibili
慕课网Freemarker在线视频教程
慕课网《Java模板引擎之Freemarker》学习总结
慕课网_《Java模板引擎之Freemarker》学习总结 - SegmentFault 思否
FreeMarker在线学习手册
什么是 FreeMarker? - FreeMarker 中文官方参考手册