FreeMarker简单入门,这篇就够了

4,516 阅读1分钟

这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

FreeMarker简介

FreeMarker是免费的,基于Apache许可证2.0版本发布

基于模板 + 要改变的数据,并用来输出文本(HTML网页、电子邮件、配置文件、源代码等)

Freemarker 模板语言是FTL文件编写的(Freemarker 文件后缀 .ftl)

FreeMarker.png

参考文献: freemarker.apache.org/

FreeMarker优势

jsp技术是servlet 将jsp 编译成java 代码 然后通过java 代码处理响应给浏览器,这个过程响应比较慢

FreeMarker技术 将模板中占位变量 和 代码中响应给前台的数据 ,通过FreeMarker引擎 对接 直接输出响应给浏览器, 大大提高了响应速度

FreeMarker入门

FreeMarker 使用流程:

  1. 新建Spring Boot项目
  2. 导入依赖
  3. 新建控制类
  4. 编写FreeMarker
  5. 启动项目

项目结构

02SpringBoot_FreeMarker.iml
│  pom.xml
│
└─src
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─any
    │  │          │  Application.java
    │  │          │
    │  │          └─controller
    │  │                  TestController.java
    │  │
    │  └─resources
    │      └─templates
    │              test.ftl
    │
    └─test
        └─java

新建启动类

package com.any;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

新建控制类

package com.any.controller;

@Controller
public class TestController {

    /**
     * 测试: http://localhost:8080/test
     */
    @RequestMapping("/test")
    public String getName(Model model) {
        model.addAttribute("name", "李四");
        return "test";
    }

}

FreeMarker文件

<html>
<head>
    <title>freemarker学习</title>
</head>
<body>
欢迎${name}到来
</body>
</html>

启动测试

省略

FreeMarker常用语法

if指令

<#if name=='李四'>
    true
</#if>

list指令

    /**
     * 测试: http://localhost:8080/test2
     */
@RequestMapping("/test2")
public String testList(Map<String,Object> map){

    List<User>  users = new ArrayList<>();
    users.add(new User("lisi",15));
    users.add(new User("test",25));
    users.add(new User("zhangsan",25));
    map.put("lists",users);
    return "test2";
}
<table>
    <#list lists as u>
        <#if u_index%2==0 ><tr style="background-color: red"></#if>
        <#if u_index%2!=0><tr style="background-color: green"></#if>
        <tr>
            <td>${u.name}</td>
            <td>${u.age}</td>
        </tr>
    </#list>
</table>

遍历Map

    /**
     * 测试: http://localhost:8080/test3
     */
@RequestMapping("/test3")
public String testMap(Map<String,Object> map){
    HashMap<String, Object>  mp = new HashMap<>();
    mp.put("1",new User("lisi",15));
    mp.put("2",new User("zhangsan",19));
    mp.put("3",new User("test",20));
    map.put("ma",mp);
    return "test3";
}
<table>
    <#list ma?keys as k>
        <tr>
            <td>${ma[k].name}</td>
            <td>${ma[k].age}</td>
        </tr>
    </#list>
</table>

运算符

空值处理

?? 判断是不为空

${name!""} name 为空时 显示 ""

<#if name??>
 	${name}
</#if>

<#if name??>
 	${name!""}
</#if>

内建函数 时间处理

/**
  * 测试: http://localhost:8080/test4
  */
@RequestMapping("/test4")
public String test4(Model model) {
    model.addAttribute("date",new Date());
    return "test4";
}
<body>
	显示年月日: ${date?date}<br>
    显示时分秒:${date?time}<br>
    显示日期+时间:${date?datetime} <br>
    自定义格式化: ${date?string("yyyy年MM月")}<br>
</body>