Spring-boot集成freemarker入门|实践
2019-02-12 本文已影响0人
LIN_dsdj
Spring-boot集成freemarker入门|实践
介绍
官方介绍 https://freemarker.apache.org/
百度百科:https://baike.baidu.com/item/freemarker/9489366?fr=aladdin
关于介绍本文就不重复叙述了
下面直接开始实践!
Freemarker + Springboot Maven配置基础工程
创建一个maven项目
spring-boot项目中添加依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐starter‐freemarker</artifactId>
</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.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.16</version>
</dependency>
创建模板
在 src/main/resources下创建templates,此目录为freemarker的默认模板存放目录。
在templates下创建模板文件demo.ftl.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf‐8">
<title>Hello World!</title>
</head>
<body>
Hello ${name}!
</body>
</html>
模板中的${name}最终会被freemarker替换成具体的数据。
创建controller
创建Controller类,向Map中添加name,最后返回模板文件。
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</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);
}
}
启动测试
1549936254247.pngFreeMarker基础
关于freemarket的知识点,主要是掌握一起下知识
-
总体结构
-
指令(几个核心指令)
-
表达式
-
插值
读者可以参考下面的教程
http://freemarker.foofun.cn/dgui_template_overallstructure.html
这个教程是翻译自官方的文档。可以快速浏览一遍,不懂再去查阅。
在掌握了基础的语法之后,下面进行静态化实践。
freemarker静态化实践
使用模板文件静态化
创建测试类
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);
}
}
测试结果
1549951894520.png使用模板字符串静态化
测试方法
@Test
public void testGenerateHtmlByString() throws IOException, TemplateException {
// 创建配置类
Configuration configuration = new Configuration(Configuration.getVersion());
// 测试模板内容
String templateString="" +
"<html>\n" +
" <head></head>\n" +
" <body>\n" +
" 名称:${name}\n" +
" </body>\n" +
"</html>";
// 模板加载器
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);
}
1549952513189.png
以上就是freemarker的基本使用,但看到这里我们肯定有很多疑问。下面进行总结
总结
为什么可以直接直接跳转?
模板静态化如何在场景下使用?