Java中静态模板文件freemaker使用

Java中静态模板文件freemarker使用

  • 使用背景
  • 使用流程
    • 1. 引入依赖
    • 2. 配置
    • 3. 创建模板文件
    • 4. 运行代码

使用背景

FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。
面对大文本数据展示时,每次查询数据库费时费力,基于这种读多写少的需求,考虑使用freemarker生成静态文件,存入文件系统中,查询时直接展示文件,不必在查询数据库。

使用流程

1. 引入依赖

<dependency>
     <groupId>org.springframework.bootgroupId>
     <artifactId>spring-boot-starter-webartifactId>
 dependency>
 <dependency>
     <groupId>org.springframework.bootgroupId>
     <artifactId>spring-boot-starter-freemarkerartifactId>
 dependency>

2. 配置

spring:
 freemarker:
    cache: false  #关闭模板缓存,方便测试
    settings:
      template_update_delay: 0 #检查模板更新延迟时间,设置为0表示立即检查,如果时间大于0会有缓存不方便进行模板测试
    # 设置模板文件后缀
    suffix: .ftl   

3. 创建模板文件

在resources目录下创建templates,在其中创建post.ftl模板文件
Java中静态模板文件freemaker使用_第1张图片
post.ftl文件:

DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>posttitle>
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();

结果:

你可能感兴趣的:(java,freemarker)