这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战
FreeMarker简介
FreeMarker是免费的,基于Apache许可证2.0版本发布
基于模板 + 要改变的数据,并用来输出文本(HTML网页、电子邮件、配置文件、源代码等)
Freemarker 模板语言是FTL文件编写的(Freemarker 文件后缀 .ftl)
参考文献: freemarker.apache.org/
FreeMarker优势
jsp技术是servlet 将jsp 编译成java 代码 然后通过java 代码处理响应给浏览器,这个过程响应比较慢
FreeMarker技术 将模板中占位变量 和 代码中响应给前台的数据 ,通过FreeMarker引擎 对接 直接输出响应给浏览器, 大大提高了响应速度
FreeMarker入门
FreeMarker 使用流程:
- 新建Spring Boot项目
- 导入依赖
- 新建控制类
- 编写FreeMarker
- 启动项目
项目结构
│ 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>