官方介绍 https://freemarker.apache.org/
百度百科:https://baike.baidu.com/item/freemarker/9489366?fr=aladdin
关于介绍本文就不重复叙述了
下面直接开始实践!
创建一个maven项目
spring-boot项目中添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring‐boot‐starter‐freemarkerartifactId>
dependency>
dependencies>
在resource目录下添加配置文件
server:
port: 8088 # 服务端口
spring:
application:
name: test-freemarker
freemarker:
cache: false #关闭模板缓存,方便测试
settings:
template_update_delay: 0 #检查模板更新延迟时间,设置为0表示立即检查,如果时间大于0会有缓存不方便进行模板测试
创建数据模型类
package com.dsdj.test.freemarker.model;
import lombok.Data;
import lombok.ToString;
import java.util.Date;
import java.util.List;
/**
* model
*
* @author dsdj
* @version 1.0
* @className Student
* @date 2019/2/12 9:09
**/
@Data
@ToString
public class Student {
private String name;//姓名
private int age;//年龄
private Date birthday;//生日
private Float money;//钱包
private List<Student> friends;//朋友列表
private Student bestFriend;//最好的朋友
}
这里使用了lombok需要引入下面的依赖
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.16.16version>
dependency>
在 src/main/resources下创建templates,此目录为freemarker的默认模板存放目录。
在templates下创建模板文件demo.ftl.
<html>
<head>
<meta charset="utf‐8">
<title>Hello World!title>
head>
<body>
Hello ${name}!
body>
html>
模板中的${name}最终会被freemarker替换成具体的数据。
创建Controller类,向Map中添加name,最后返回模板文件。
添加依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
package com.dsdj.test.freemarker;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* spring boot 启动类
*
* @author dsdj
* @version 1.0
* @className FreemarkerTestApplication
* @date 2019/2/12 9:41
**/
@SpringBootApplication
public class FreemarkerTestApplication {
public static void main(String[] args) {
SpringApplication.run(FreemarkerTestApplication.class,args);
}
}
关于freemarket的知识点,主要是掌握一起下知识
总体结构
指令(几个核心指令)
表达式
插值
读者可以参考下面的教程
http://freemarker.foofun.cn/dgui_template_overallstructure.html
这个教程是翻译自官方的文档。可以快速浏览一遍,不懂再去查阅。
在掌握了基础的语法之后,下面进行静态化实践。
package com.dsdj.test.freemarkert;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
/**
* TODO
*
* @author dsdj
* @version 1.0
* @className TestFreemarker
* @date 2019/2/12 10:30
**/
public class TestFreemarker {
@Test
public void testGenerateHtml() throws IOException, TemplateException, URISyntaxException {
// 创建配置类
Configuration configuration = new Configuration(Configuration.getVersion());
// 设置模板路径 toURI()防止路径出现空格
String classpath = this.getClass().getResource("/").toURI().getPath();
configuration.setDirectoryForTemplateLoading(new File(classpath+"/templates/"));
// 设置字符集
configuration.setDefaultEncoding("utf-8");
// 加载模板
Template template = configuration.getTemplate("demo1.ftl");
// 数据模型
Map<String,Object> map = new HashMap<>();
map.put("name", "静态化测试");
// 静态化
String content = FreeMarkerTemplateUtils.processTemplateIntoString(template,map);
// 打印静态化内容
System.out.println(content);
InputStream inputStream = IOUtils.toInputStream(content);
// 输出文件
FileOutputStream fileOutputStream = new FileOutputStream(new File("demo1.html"));
int copy = IOUtils.copy(inputStream, fileOutputStream);
}
}
@Test
public void testGenerateHtmlByString() throws IOException, TemplateException {
// 创建配置类
Configuration configuration = new Configuration(Configuration.getVersion());
// 测试模板内容
String templateString="" +
"\n" +
" \n" +
" \n" +
" 名称:${name}\n" +
" \n" +
"";
// 模板加载器
StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
stringTemplateLoader.putTemplate("template",templateString);
configuration.setTemplateLoader(stringTemplateLoader);
// 得到模板
Template template = configuration.getTemplate("template","utf-8");
// 数据模型
Map<String,Object> map = new HashMap<>();
map.put("name","使用模板字符串静态化");
// 静态化
String content = FreeMarkerTemplateUtils.processTemplateIntoString(template,map);
// 打印静态化内容
System.out.println(content);
InputStream inputStream = IOUtils.toInputStream(content);
// 输出文件
FileOutputStream fileOutputStream = new FileOutputStream(new File("demo1.html"));
int copy = IOUtils.copy(inputStream, fileOutputStream);
}
以上就是freemarker的基本使用,但看到这里我们肯定有很多疑问。下面进行总结
为什么可以直接直接跳转?
模板静态化如何在场景下使用?