Java中静态模板文件freemarker使用
- 使用背景
- 使用流程
- 1. 引入依赖
- 2. 配置
- 3. 创建模板文件
- 4. 运行代码
使用背景
FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。
面对大文本数据展示时,每次查询数据库费时费力,基于这种读多写少的需求,考虑使用freemarker生成静态文件,存入文件系统中,查询时直接展示文件,不必在查询数据库。
使用流程
1. 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2. 配置
spring:
freemarker:
cache: false #关闭模板缓存,方便测试
settings:
template_update_delay: 0 #检查模板更新延迟时间,设置为0表示立即检查,如果时间大于0会有缓存不方便进行模板测试
# 设置模板文件后缀
suffix: .ftl
3. 创建模板文件
在resources目录下创建templates,在其中创建post.ftl模板文件
post.ftl文件:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>post</title>
</head>
<body>
<div class="article-content">
<#if content??>
<#list content as item>
<#if item.type='text'>
<p span="24" class="article-text">${item.value}</p>
<#else>
<div span="24" class="article-image">
<img width="100%" src="${item.value}"></img>
</div>
</#if>
</#list>
</#if>
</div>
</body>
</html>
json数据源(这里为了方便手动建立JSON数据源,实际开发中可从数据库中查询)
r.json
[
{
"type": "text",
"value": "在选择IT培训机构时,你应该有注意到,很多机构都将“项目课程”作为培训中的重点。那么,为什么要学习项目课程?为什么项目课程才是IT培训课程的核心?\n\n 1\n\n 在这个靠“技术经验说话”的IT行业里,假如你是一个计算机或IT相关专业毕业生,在没有实际项目开发经验的情况下,“找到第一份全职工作”可能是你职业生涯中遇到的最大挑战。\n\n 为什么说找第一份工作很难?\n\n 主要在于:实际企业中用到的软件开发知识和在学校所学的知识是完全不同的。假设你已经在学校和同学做过周期长达2-3个月的项目,但真正工作中的团队协作与你在学校中经历的协作也有很多不同。"
},
{
"type": "image",
"value": "http://localhost:9000/leadnews/2023/07/21/b2459eb50de3441b999252a9981bb744.jpg"
},
{
"type": "text",
"value": "在实际团队中,每一位成员彼此团结一致,为项目的交付而努力,这也意味着你必须要理解好在项目中负责的那部分任务,在规定时间交付还需确保你负责的功能,在所有环境中都能很好地发挥作用,而不仅仅是你的本地机器。\n\n 这需要你对项目中的每一行代码严谨要求。学校练习的项目中,对bug的容忍度很大,而在实际工作中是绝对不能容忍的。项目中的任何一个环节都涉及公司利益,任何一个bug都可能影响公司的收入及形象。"
}
]
4. 运行代码
仅提供在本地生成html文件代码
StringWriter out = new StringWriter();
Template template = configuration.getTemplate("post.ftl");
JSON json = JSONUtil.readJSON(new File("D:\\JavaHome\\postgraduateforum\\src\\main\\resources\\templates\\r.json"), StandardCharsets.UTF_8);
Map<String, Object> params = new HashMap<>();
params.put("content", JSONUtil.parseArray(json));
template.process(params, out);
FileOutputStream fileOutputStream = new FileOutputStream("D:\\01.html");
PrintStream out1 = new PrintStream(fileOutputStream);
out1.println(out);
out1.close();
out.close();
结果: