
FreeMarker定义
FreeMarker是一款Java模板引擎,,够帮我们实现页面静态化,同时它将Java代码与网页分开,并为Java Server Pages(JSP)提供了可行的替代方案。
FreeMarker作用
模板引擎这里特指:用于Web开发的模板引擎,是为了使用户界面与业务数据分离而产生的,它可以生成特定格式的文档,比如:网站标准的html等。
要理解FreeMarker模板引擎的作用,需要理解MVC模式,如下图所示:

M(Model模型):包含后台的事务逻辑、真正处理事务的代码和商业逻辑等;
V(View视图):是网页显示部分,这部分接受来自后台程序结果或数据进行显示;
C(Controller控制器):在视图和模型之间传递控制,并依据要求调用对应的视图显示模型返回数据;
我们平时使用JSP页面,能够在JSP页面中写Java相关逻辑,这样在View中混淆了逻辑代码,造成前后端混淆在一起,彼此职责不分明。
所以以FreeMarker为代表的Java模板引擎出现,就可以将Java代码从网页中分离出来。
使得页面设计者可以专注于版面的设计,而Java程序员可以集中精力编写复杂的代码, 从而实现前后端分离,提升工作效率。
FreeMarker语法
FreeMarker主要包含如下4大部分:
<html>
<body>
<#-- 注释部分 -->
<br>
<#-- 下面使用插值 -->
<h1>Welcome ${user} !</h1>
<p>We have these animals:
<u1>
<#-- 使用FTL指令 -->
<#list animals as being>
<li>${being.name} </li>
<#list>
<u1>
</body>
</html>
1)文本:直接输出的部分;
2)注释:即<#–…–>格式不会输出;
3)插值:即${..}或者#{..}格式的部分,将使用数据模型中的部分替代输出;
4)指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分;
1.条件控制语句
# 格式
<#if 条件1>
...
<#ifelse 条件2>
...
<#ifelse 条件3>
...
<#else>
...
<#/if>
2.switch case语句
<#switch name>
<#case "freemarker">This is a freemarker's template.<#break>
<#case "velocity">This is a velocity's template.<#break>
<#default>This is a jsp's template.
</#switch>
3.macro指令
<#macro mo>
定义无参数的宏macro--${name}
</#macro>
示例如下:
<#macro phone>
168158168188
</#macro>
使用自定义指令
<@phone></@phone>
4.import指令
类似于java里的 import,它导入文件,然后就可以在当前文件里使用被导入文件里的宏组件。
示例如下,建立commons.ftl:
<#maro cfb> QQ: 875667601 </#maro>
导入命名空间
<#-- 导入命名空间 --> <#import "commons.ftl" as common>
5.include指令
可以使用include指令在模板中插入另外一个模板,被包含的模板输出在include的位置上,像是复制进去了一样。
示例如下:
<#include "test.ftl"> <#include "test.txt">
6.assign定义变量
自定义变量assign,示例如下:
<#assign number1 = 10> <#assign number2 = 5>
7.比较运算符
!= :判断两个值是否不等. > 或 gt :判断左边值是否大于右边值 >= 或 gte :判断左边值是否大于等于右边值 < 或 lt :判断左边值是否小于右边值 <= 或 lte :判断左边值是否小于等于右边值
FreeMarker使用
下面我们在springboot项目时使用FreeMarker,整个使用流程如下:
1.添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2.设置freemarker的配置
spring:
freemarker:
template-loader-path: ["classpath:/templates/"] #设置ftl文件位置,这个是默认值
cache: false #设置缓存页面,默认值
charset: utf-8 # 设置页面编码格式
check-template-location: true
content-type: text/html #设置文档类型
expose-request-attributes: false #设定所有request的属性在merge到模板的时候,是否要都添加到model中.
expose-session-attributes: false #设定所有HttpSession的属性在merge到模板的时候,是否要都添加到model中.
request-context-attribute: rc #指定RequestContext属性的名.
suffix: .ftl #设置模板后缀名
3.添加模板
<!DOCTYPE html>
<html lang="en">
<body>
<h1>Hello Freemarker ${name}</h1>
</body>
</html>
4.设置controller
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping(value = "/hello")
public String hello(Model model){
model.addAttribute("name","test");
return "user/hello";
}
}
5.运行效果
hello test
mikechen睿哥
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。