什么是Freemarker
FreeMarker 是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
特点
- 轻量级模版引擎,不需要Servlet环境就可以很轻松的嵌入到应用程序中
- 能生成各种文本,如html,xml,java,等
- 入门简单,它是用java编写的,很多语法和java相似
工作原理
为什么用Freemarker
SpringBoot虽然支持JSP,但是官方不推荐使用。
SpringBoot官方推荐使用Thymeleaf模板引擎,但是Thymeleaf并没有Freemarker好用。
Freemarker与Thymeleaf的比较
thymeleaf优点:
1.静态html嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调。
2.springboot官方推荐方案。
thymeleaf缺点:
1.模板必须符合xml规范,就这一点就可以判死刑!太不方便了!js脚本必须加入/<![CDATA[/标 识,否则一个&符号就会导致后台模板合成抛异常,而且错误信息巨不友好,害得我调试了好几个小时才明白是怎么回事。js里面还好办,这样是在html里面含有&等符号,还需要转义?忒麻烦了!
2.就上面一条就够了。
freemarker优点:
1.和jsp规范基本一致,大多数程序员几乎无学习成本。
freemarker缺点:
null
Freemarker的使用
导入坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
Freemarker模板文件扩展名为.ftl,放在templates文件夹中
如果扩展名想改变,可以通过在application配置文件中添加
spring.freemarker.suffix=.html
更改后就会找.html结尾的文件模板
取值
对象:
$ {值/对象名.属性名},如果对象可能为null,则使用:$ {值/对象名.属性名!“双引号中可选,如果为null时显示什么”},
boolean 类型:
${布尔值?string("true","flase")}
日期类型:
${日期值?string("yyyy-MM-dd")}
不被当html 解析
${值/对象名.属性名?html}
在页面中自定义变量:
<#assign 属性名 = 属性值 />
对List集合取值:
<#list 要遍历的集合名 as item>
${item} 取值
</#list>
对Map集合取值:
<#list 集合名?keys as key>
$ {key}: $ {集合名[key]}
</#list>
If判断:
<#if 条件>
条件成功后显示的内容
</#if>
If-else判断:
<#if 条件>
条件成功后显示的内容
<#else>
上面条件不成立后显示的内容
</#if>
If-elseif-else判断:
<#if 条件1>
条件1成功后显示的内容
<#elseif 条件2>
条件2成功后显示的内容
<#elseif 条件...>
...
<#else>
上面条件不成立后显示的内容
</#if>
引入其他模板:
<#include “/copyright_footer.ftl”>
静态文件的引入
静态文件(Js,Css,图片等)都放在resources/static中,结构如下:
static
|–js
index.js
|–css
index.css
|–imgs
index.png
引入方式:
< script src="/js/index.js" ></script>
< link rel="stylesheet" type="text/css" href="/css/index.css" />
< img src="/imgs/index.png" />