Java中静态模板文件freemaker使用

news2024/11/25 2:26:13

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();

结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/786305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Softing工业将亮相2023上海国际工博展

Softing工业将亮相2023年上海国际工业博览会 ——碳循新工业 数聚新经济 “中国国际工业博览会”作为广受瞩目的专业展之一&#xff0c;全面展示了生产、过程自动化的最新技术和全面解决方案、电气系统、工业IT与制造业信息化、微系统技术&#xff1b;是中国工业领域规模最大…

mysqldump 搭建复制报错,竟然是因为这个!

作者详细分析了一个 mysqldump 搭建复制失败的问题分析过程和改进建议。 作者&#xff1a;李富强 爱可生 DBA 团队成员&#xff0c;熟悉 MySQL&#xff0c;TiDB&#xff0c;OceanBase 等数据库。相信持续把对的事情做好一点&#xff0c;会有不一样的收获。 本文来源&#xff1a…

Linux在history命令上显示日期时间

1.在用户的家目录下打开个性化设置文件.bashrc&#xff0c;添加入export HISTTIMEFORMAT" %F %T "并保存 2.在通过source命令使得配置文件生效&#xff0c;再次查看history命令就会显示时间了

Qt 桌面闹钟提示小程序

程序运行截图 倒计时 闹钟设置界面 闹钟弹窗提示提示音 源码 gitee源码链接 软件打包

ncnn-android-yolov7跑自己模型的注意事项

ncnn-android-yolov7 这是一个示例 ncnn android 项目&#xff0c;它依赖于 ncnn 库和 opencv https://github.com/Tencent/ncnn https://github.com/nihui/opencv-mobile https://github.com/xiang-wuu/ncnn-android-yolov7 如何构建和运行 步骤1 https://github.com/Ten…

C++_适配器模式——reverse_iterator模拟实现

文章目录 前言适配器(Adapter)容器适配器迭代器适配器——reverse_iterator具体逻辑完整代码 总结 前言 本篇博客主要会给大家讲解C的一个代码复用的重要方式——适配器模式&#xff0c;并且详细讲解stl是如何运用这中设计理念来实现reverse_iterator的&#xff0c;给出了模拟实…

【MySQL】centos 7下MySQL的环境搭建

从本期博客开始我们正式进入到数据库的学习&#xff0c;在学习数据库时所用到的工具是Linux环境下的MySQL 目录 一、检查环境中是否装有MySQL 二、获取MySQL官方yum源 三、配置MySQL官方yum源 四、一键安装MySQL 五、启动mysql服务 六、登录MySQL 七、修改mysql配置文件…

【Kafka】常用操作

1、基本概念 1. 消息&#xff1a; Kafka是一个分布式流处理平台&#xff0c;它通过消息进行数据的传输和存储。消息是Kafka中的基本单元&#xff0c;可以包含任意类型的数据。 2. 生产者&#xff08;Producer&#xff09;&#xff1a; 生产者负责向Kafka主题发送消息。它将消息…

智慧园区楼宇合集:数字孪生管控系统

智慧园区是指将物联网、大数据、人工智能等技术应用于传统建筑和基础设施&#xff0c;以实现对园区的全面监控、管理和服务的一种建筑形态。通过将园区内设备、设施和系统联网&#xff0c;实现数据的传输、共享和响应&#xff0c;提高园区的管理效率和运营效益&#xff0c;为居…

2023年一建学霸笔记

考点:单方取消或辞去委托承担的民事责任女《民法典》规定&#xff0c;因解除合同造成对方损失的&#xff0c;除不可归责于该当事人的事由外&#xff0c;无偿委托合同的解除方应当赔偿因解除时间不当造成的直接损失&#xff0c;有偿委托合同的解除方应当赔偿对方的直接损失和合同…

光模块高低温消光比差异大的原因分析

用于高速数字通信的光模块&#xff0c;需要具备一些特定的参数条件。其中的一个参数&#xff0c;就是消光比。消光比被用来描述最优的偏置条件和激光发射功率转化成调制功率的效率。今天就跟着小易来了解一下在实际应用中消光比产生差异的原因吧&#xff01; 一、消光比的定义…

给照片加水印软件让你保护版权不麻烦

嘿&#xff01;想要保护你的照片免受盗用吗&#xff1f;或者想为你的作品增添独特的标识&#xff1f;好消息是现在有一种水印技术可以帮你解决这些问题&#xff0c;那么&#xff0c;你知道照片加水印软件有哪些吗&#xff1f;还不清楚的朋友请你关注下这篇文章哦。接下来让我来…

125K天线驱动器芯片UM12020D 最大直流驱动电流高达1.8A

UM12020D一个集成的天线驱动器&#xff0c;该芯片提供高达1.8A的输出直流电流&#xff0c;可在0至11V的天线电源&#xff08;VM&#xff09;和1.8V至5V的器件电源电压 (VCC) 上工作。该产品具有超低的rds-on&#xff0c;采用SOP-8封装。UM12020D具有PWM&#xff08;IN1-IN2&…

防止超卖的7种实现

高并发场景在现场的日常工作中很常见&#xff0c;特别是在互联网公司中&#xff0c;这篇文章就来通过秒杀商品来模拟高并发的场景。 本文环境&#xff1a; SpringBoot 2.5.7 MySQL 8.0 X MybatisPlus Swagger2.9.2模拟工具&#xff1a; Jmeter模拟场景&#xff1a; 减库存-…

一文搞懂MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布

之前介绍了RabbitMQ以及如何在SpringBoot项目中整合使用RabbitMQ&#xff0c;看过的朋友都说写的比较详细&#xff0c;希望再总结一下目前比较流行的MQTT。所以接下来&#xff0c;就来介绍什么MQTT&#xff1f;它在IoT中有着怎样的作用&#xff1f;如何在项目中使用MQTT&#x…

【Android】setContentView的学习笔记

启动一个Activity performLaunchActivity&#xff08;&#xff09; ActivityThread.performLaunchActivity() 方法是 Android 系统中负责启动一个 Activity 的关键方法。 当调用startActivity()方法启动一个 Activity 时&#xff0c;ActivityThread 对象会接收到该请求&…

小白必看系列之图书管理系统-登录和注册功能示例代码

文章目录 前言变量定义区域实体部分区域注册账号逻辑用户登录逻辑退出程序打印用户信息完整代码完结 前言 在现代社会中&#xff0c;计算机科学和编程技术的重要性日益凸显。作为开发者和技术爱好者&#xff0c;我们时刻追求着创新和实用性&#xff0c;希望通过技术的力量改善…

Springboot+Netty

目录 一、netty入门 二、启动方式 三、netty服务启动类 四、handler链 五、具体业务 六、 线程或者非spring管理的bean中获取spring管理的bean 七、效果 一、netty入门 Netty-导学_哔哩哔哩_bilibili 入门视频量比较大&#xff0c;最主要是了解netty的架构 netty官网&am…

Chapter 9 Port Delays (端口延迟)set input/output delay

文章目录 9.1 Input Availability---输入有效9.1.1 Min and Max Availability Time---最小和最大有效时间9.1.2 Multiple Clocks9.1.3 Understanding Input Arrival Time 9.2 Output Requirement9.2.1 Min and Max Required Time9.2.2 Multiple Reference Events9.2.3 Understa…

【梦辛工作室】IF判断优化、责任链模式 IfChain

大家好哇&#xff0c;我是梦辛工作室的灵&#xff0c;在最近的开发中&#xff0c;有许多需要判断的分支处理&#xff0c;且处理内容较多且复杂&#xff0c;代码就容易越写越复杂&#xff0c;导致后期无法继续更新跌打&#xff0c;然后基于这个环境&#xff0c;我用责任链模式写…