FreeMarker最全详解(语法作用及使用教程)

FreeMarker最全详解(语法作用及使用教程)-mikechen

FreeMarker定义

FreeMarker是一款Java模板引擎,,够帮我们实现页面静态化,同时它将Java代码与网页分开,并为Java Server Pages(JSP)提供了可行的替代方案。

 

FreeMarker作用

模板引擎这里特指:用于Web开发的模板引擎,是为了使用户界面与业务数据分离而产生的,它可以生成特定格式的文档,比如:网站标准的html等。

要理解FreeMarker模板引擎的作用,需要理解MVC模式,如下图所示:

FreeMarker最全详解(语法作用及使用教程)-mikechen

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年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法