freemarker自定义模板

模板编程器指南

<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version>
</dependency>

freemarker官网参考:
https://freemarker.apache.org/docs/pgui_quickstart_all.html

模板由freemarker.template.template实例表示。通常,您可以使用其从Configuration实例中获取Template实例。getTemplate方法。如果您将示例模板存储在前面集合目录的test.ftlh文件中,则可以执行以下操作:

Template temp=cfg.getTemplate(“test.ftlh”);

这为您提供了一个Template实例,该实例是通过读取/where/you/store/templates/test.ftlh并对其进行解析而创建的。Template实例以解析后的形式存储模板,而不是以文本形式存储。如果模板丢失或语法不正确,getTemplate将引发异常。
配置缓存模板实例,因此当您下次调用cfg.getTemplate(“test.ftlh”)时,它可能不会再次读取和解析模板文件,只是返回与第一次相同的模板实例。

data-model + template = output

它将数据模型和一个Writer作为参数。它将生成的输出写入Writer

一旦获得了Template实例,就可以无限次地将其与不同的数据模型合并(Template实例是无状态的)。此外,test.ftlh文件仅在创建Template实例时访问,而不是在调用process方法时访问。


@Service
public class TemplateServiceImpl implements TemplateService {// 本地模板文件:resources/freemarker/test.ftlh@Overridepublic String getTemplateContentFromFile(){Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);cfg.setDefaultEncoding("UTF-8");try {ClassPathResource freemarker = new ClassPathResource("freemarker");File file = freemarker.getFile();cfg.setDirectoryForTemplateLoading(file);} catch (IOException e) {e.printStackTrace();}cfg.setSQLDateAndTimeTimeZone(TimeZone.getDefault());StringWriter writer = null;try {Template template = cfg.getTemplate("test.ftlh");Product product = new Product();product.setName("zjy");product.setUrl("www.baidu.com");HashMap<String, Object> map = new HashMap<>();map.put("user", "wwowowow");map.put("latestProduct", product);writer = new StringWriter();template.process(map, writer);} catch (IOException | TemplateException e) {e.printStackTrace();} finally {IOUtils.closeQuietly(writer);}return writer.toString();}@Overridepublic String getTemplateContentFromString(String content, Map<String, Object> dataModal) {if (MapUtil.isEmpty(dataModal)) {return null;}String fileName = dataModal.getOrDefault("fileName", "demo.html").toString();StringReader reader = new StringReader(content);StringWriter writer = null;try {Template template = new Template(fileName, reader, null, "UTF-8");writer = new StringWriter();template.process(dataModal, writer);} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();} finally {org.apache.commons.io.IOUtils.closeQuietly(writer);}return writer.toString();}
}
// 浏览器下载
@RequestMapping(value = "/text/upload", method = RequestMethod.GET)
@ResponseBody
public HttpServletResponse upload(HttpServletResponse response) {String templateContent = templateService.getTemplateContentFromFile();try (StringReader reader = new StringReader(templateContent);ServletOutputStream output = response.getOutputStream()) {response.reset();// 定义输入文件名String encode = URLEncoder.encode("zjy.html", "UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + encode);// 定义输出类型
//            response.setContentType("bin");
//            response.setContentType("application/x-msdownload");response.setContentType("application/octet-stream");response.setCharacterEncoding("UTF-8");IOUtils.copy(reader, output, Charset.forName("UTF-8"));} catch (IOException e) {e.printStackTrace();}return response;
}// 下载到本地resources
@RequestMapping(value = "/text/local", method = RequestMethod.GET)
@ResponseBody
public void localDown() {try {String templateContent = templateService.getTemplateContentFromFile();ClassPathResource resource = new ClassPathResource("bak/test.html");File file = resource.getFile();FileUtil.writeUtf8String(templateContent, file);} catch (IOException e) {e.printStackTrace();}}

手动维护模板并生成文件

/*** 编辑器保存的是字符串,* 使用freemarker模板引擎,* 将dataModal数据填充到模板中* 返回完成文件* @param data* @return*/
@RequestMapping(value = "/text/save", method = RequestMethod.POST)
@ResponseBody
public String save(@Nullable @RequestBody String data) {
// 1. 创建datamodal数据Product product = new Product();product.setTemplateFileName("demo.html");product.setName("zjy");product.setUrl("www.baidu.com");HashMap<String, Object> map = new HashMap<>();map.put("user", "wwowowow");map.put("latestProduct", product);// 2. data-model + template = outputString content = templateService.getTemplateContentFromString(data, map);//      字符串模板创建指定文件,如果不存在新建,存在覆盖FileUtil.writeUtf8String(content, "E:\\note\\flowable-project\\liteflow-demo\\liteflow-example\\src\\main\\java\\com\\yomahub\\liteflow\\example\\controller\\demo.html");return content;
}

在这里插入图片描述

xml

元素、文本、注释、处理指令等
The parse method removescomment and processing instruction nodes by default
解析方法 会删除 注释和 处理指令节点

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

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

相关文章

浏览器原生JavaScript离线文字转语音TTS播放,支持Windows自带TTS语音和移动端(安卓、IOS)

前言 JS已经可以实现语音合成(文字转语音)和语音识别(语音转文字),各个浏览器支持列表如下所示: 语音识别支持列表: 因此,浏览器上面使用语音合成非常简单。 页面效果示例: 实现功能 1、支持速度,音调设置 2、支持下拉选择语音模板 3、文字转语音 代码实现 …

云服务器 CentOS7 操作系统上安装Jpress (Tomcat 部署项目)

1、xShell 和 xftp 下载安装&#xff08;略&#xff09; https://www.xshell.com/zh/free-for-home-school/2、xftp 连接云服务器 xftp 新建连接 3、JDK 压缩包下载 下载 jdk1.8 注&#xff1a;此处 CentOS7 是64位&#xff0c;所以下载的是&#xff1a;Linux x64&#xf…

Hbuilder本地调试微信H5项目(二)--添加UView框架插件

摘要 在一个已创建的Hbuilder项目中&#xff0c;添加uView框架插件 前置准备 已安装Hbuilder 已创建uni-app的H5默认模板项目 实现逻辑 在Hbuilder官网找到组件说明页面 下载插件并导入HbuilderX 具体实现 访问网站 访问网址Hbuilder的uView1.8.6版本说明页 或者访问…

Python3操作MySQL8.XX创建表|CRUD基本操作

Python3操作MySQL8.XX创建表|CRUD基本操作 Python3操作SQLite3创建表主键自增长|CRUD基本操作 一&#xff1a; Python3操作Mysql数据库建表 import pymysqlPython3操作Mysql创建表&#xff1a; # 打开数据库连接 db pymysql.connect(host"localhost", user"您…

芯片SoC设计你了解吗?

数字IC设计根据岗位性质一般包含SOC设计&#xff0c;前端设计&#xff0c;ASIC设计&#xff0c;逻辑设计&#xff0c;IP设计&#xff0c;CPU设计等。 有人说&#xff1a;做IP设计就是翻译官&#xff0c;做SOC设计就是连连看。 SoC设计是做什么的&#xff1f;与IP设计有什么不同…

现代架构设计:构建可伸缩、高性能的分布式系统

文章目录 第1节&#xff1a;引言第2节&#xff1a;架构设计的关键原则2.1 微服务架构2.2 异步通信2.3 数据分区和复制2.4 负载均衡 第3节&#xff1a;代码示例3.1 创建产品服务3.2 创建消息队列3.3 创建产品更新服务 第4节&#xff1a;性能优化和监控4.1 建立性能基准4.2 水平扩…

解密智能化评估在培训考试系统中的应用

智能化评估在培训考试系统中的应用旨在提供更全面和准确的评估方式&#xff0c;以帮助培训机构或个人评估学员的学习成果。该系统结合了现代技术和评估理论&#xff0c;能够自动化地进行评估、反馈和分析&#xff0c;提供个性化的学习支持和指导。 智能化评估系统通过采集学员…

TensorFlow入门(四、数据流向机制)

session与"图"工作过程中存在的两种数据的流向机制,即:注入机制和取回机制 注入机制(feed):即通过占位符向模式中传入数据 取回机制(fetch):指在执行计算图时&#xff0c;可以同时获取多个操作节点的计算结果 实例代码如下: import tensorflow.compat.v1 as tftf…

信息收集进阶版-张榜公告型收集

信息收集进阶版-张榜公告型收集 一、思路&#xff08;1&#xff09;张榜公告型收集1.明确思维&#xff0c;构建思维导图2.逐行分析①利用FOFA、SHODAN、Hunter来直接精确定位到想要的资产②调用nmap来确认端口是否是正常开放③批量检测收集到的资产是否是正常回复④编写POC检测…

csdn未经允许将我的文章设置成vip收费

以前在csdn写了一些笔记&#xff0c;后来不用csdn了&#xff0c;想着留下这些笔记或多或少能帮助其他初学者&#xff0c;就没管它。结果csdn把文章设置成收费了&#xff0c;这个收费不是我本人弄的&#xff0c;是csdn弄的&#xff01;我现在只能把这些文章删除掉了。

【慕伏白教程】 Linux 深度学习服务器配置指北

文章目录 镜像烧录系统安装系统配置常用包安装 镜像烧录 下载 Ubuntu 镜像 Ubuntu 桌面版 下载烧录工具 balenaEtcher 准备至少 8G 的 空白U盘 开始烧录 系统安装 开机进入BIOS&#xff0c;修改U盘为第一启动 选择 Try or Install Ubuntu 往下拉&#xff0c;选择 中文&a…

1、靶机——Pinkys-Place v3(1)

文章目录 一、环境二、获取flag11、扫描局域网内存活主机1.1 查看kali的IP地址1.2 扫描存活主机 2、粗略扫描靶机端口&#xff08;服务&#xff09;3、寻找ftp服务漏洞4、扫描端口详细信息5、匿名登录ftp 一、环境 攻击机&#xff1a;kali 靶机&#xff1a;Pinkys-Place v3&am…

【独家专访】“数网”同防筑牢屏障——新型电力系统网络安全保障体系需加快调整

随着全球数字化进程不断加快&#xff0c;在国际竞争和冲突中&#xff0c;网络战和数据战已然屡见不鲜。电力作为关系国计民生的关键行业&#xff0c;更成为网络攻击的重要对象。加强电力等关键信息基础设施的网络安全保障&#xff0c;是国家今后一段时期的重点工作。7月15日召开…

json对象中嵌套一个json字符串,python如何生成带有转义字符的json的字符串?

前言 不想用java去弄&#xff0c;一顿操作json.dumps也没用&#xff0c;后面才知道需要这么操作 目的生成&#xff1a; data {"json": "{\"key1\": \"value1\", \"key2\": \"value2\"}" }但是直接用 import …

微信删除好友对方知道吗?如何加回微信好友?

微信是我们日常生活中使用最多的社交软件&#xff0c;很多小伙伴在使用微信时都曾发出过这样的疑问&#xff1a;微信删除好友对方知道吗&#xff1f;当自己在微信中删除某人后&#xff0c;对方是否会收到信息提醒&#xff1f;另外&#xff0c;如果删除好友后感到后悔&#xff0…

lenovo联想笔记本电脑ThinkPad X13 AMD Gen2(20XH,20XJ)原装出厂Windows10系统镜像

联想原厂Win10系统&#xff0c;自带所有驱动、出厂主题壁纸、系统属性联想LOGO专属标志、Office办公软件、联想电脑管家等预装程序 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;dolg 适用于型号&#xff1a;20XL,20XJ,20XG,21A1,20XK,20XH,20XF,21A0 所需要…

竞赛 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python

文章目录 1 前言1 课题背景2 GAN(生成对抗网络)2.1 简介2.2 基本原理 3 DeOldify 框架4 First Order Motion Model5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于生成对抗网络的照片上色动态算法设计与实现 该项目较为新颖&am…

[golang gui]fyne框架代码示例

1、下载GO Go语言中文网 golang安装包 - 阿里镜像站(镜像站使用方法&#xff1a;查找最新非rc版本的golang安装包) golang安装包 - 中科大镜像站 go二进制文件下载 - 南京大学开源镜像站 Go语言官网(Google中国) Go语言官网(Go团队) 截至目前&#xff08;2023年9月17日&#x…

ubuntu18.04安装docker

ubuntu18.04安装docker 文章目录 ubuntu18.04安装docker一.安装1.更新软件库索引2.安装一些必要的软件包3.添加Docker的官方GPG密钥4.添加Docker软件库5.再次更新软件库索引6.安装Docker CE7.启动Docker并设置开机启动8.验证Docker安装9.(若要让非root用户可以运行Docker命令)可…

8应用服务与领域服务

本系列包含以下文章&#xff1a; DDD入门DDD概念大白话战略设计代码工程结构请求处理流程聚合根与资源库实体与值对象应用服务与领域服务&#xff08;本文&#xff09;领域事件CQRS 案例项目介绍 # 既然DDD是“领域”驱动&#xff0c;那么我们便不能抛开业务而只讲技术&…