从一坨代码说起

news2024/10/7 12:24:11

一、前言

下图所示这一坨代码是为了生成HTML格式邮件正文内容,如果邮件内容要稍微调整一下,这种代码怎么维护?

好吧,其实这是一篇与邮件有关的文章,SMTP发送邮件 介绍了邮件发送各种方式及SMTP各种端口,从半张残缺的图片说起  讲了邮件发送图片用base64编码避免远程图片地址因安全问题被邮件服务器限制,今天我们来讲一下怎么使用模板引擎构建邮件正文内容。

二、模板引擎概念

1、模板引擎目的是为了将显示和数据分离,其本质是将模板文件和数据通过模板引擎生成HTML代码,主要就是将指定的标签转换为业务数据,另外还要能将指定的语句按照某种流程转换输出,比如循环判断标签等。

2、模板引擎是各平台前后端都有的概念,项目中接触过的有JavaScript的EasyTemplate、后端Java在做没有前后端分离的项目时用到Freemarker、Velocity,另外在SpringBoot开始流行时考虑到SEO优化我们用ThymeLeaf来搭建窗帘定制网站。

3、简单的模板引擎我们自己也可以写,其本质对特殊标签进行替换。

三、ThymeLeaf构建邮件内容

ThymeLeaf是SpringBoot官方推荐的模板引擎,它提供了SpringMVC完美的支持,可以做为Web应用的View层,我们这里仅将其做为邮件模板,最简单使用方法如下所示

1、依赖引入

  • spring-boot-starter-thymeleaf

  • ognl  这个一定要加上,表达式语言,可以方便地遍历JavaBean对象。

2、模板文件

模板文件默认放在resources/templates/下就可以,动态数据使用ThymeLeaf标签。

3、代码

4、执行结果

注:ThymeLeaf标签很丰富,这里不展开讲。

四、ThymeLeaf模板引擎源码解读

1、TemplateEngine.initialize

引擎初始化方法,判断是否已经执行过初始化,如未初始化则执行初始化方法,设置模板解析器,如果外部没有设置,默认用StringTemplateResolver。

2、TemplateManager.parseAndProcess

解析模板,如果模板已经加载到缓存直接使用,否则读取模板文件,最终会调用TemplateHandlerAdapterMarkupHandler去解析HTML文档,并且将数据渲染到HTML文档上,这个解析器和以前用的DOM4J什么看起来很像,也是以事件的方法触发,比如handleOpenElementStart、 handleOpenElementEnd这种方法。

3、输出渲染后的HTML文档

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

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

相关文章

回顾C++

大一的时候学过C,当时学得也不深,考试也是糊弄过去的,最近刷力扣的时候,决定一边刷题,一边复习和学习C,在此记录一些C的知识点。反正遇到一点就记录一点,会一直更新。

如何清理C盘

当前最棘手的问题是C盘满了,如何清理成了一个大问题,在本篇文章中我将记录我在清理c盘空间过程中的探索。 2023-10-06探索无果,记录于此。

浪涌保护器的P数是什么,选型浪涌保护器注意事项

浪涌保护器是一种用于保护电气设备免受雷电或其他瞬态过电压影响的装置,它可以将过高的电压限制在安全的范围内,并将多余的电流导入地线,从而避免设备损坏。浪涌保护器的P数是指它的保护模式,也就是它可以在哪些线路之间提供保护。…

xxl-job使用(小白也看得懂)

分布式任务调度 在微服务架构体系中,服务之间通过网络交互来完成业务处理的,在分布式架构下,一个服务往往会部署多个实例来运行我们的业务,如果在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度。 在当体…

FFmpeg 命令:从入门到精通 | 命令行环境搭建

FFmpeg 命令:从入门到精通 | 命令行环境搭建 FFmpeg 命令:从入门到精通 | 命令行环境搭建安装 FFmpeg验证 FFmpeg 是否安装成功 FFmpeg 命令:从入门到精通 | 命令行环境搭建 安装 FFmpeg 进入 FFmpeg 官网: 点击 Download&#…

河北吉力宝:国内顶尖资源荣誉共筑全景融合新商业生态

随着科技的不断发展和社会的进步,新兴企业纷纷崭露头角,展现出令人瞩目的商业潜力。随着科技的不断演进和社会的持续进步,新兴企业正崭露头角,显露出巨大的商机。在这个时代,合作和资源整合变得至关重要。河北吉力宝智…

【STM32单片机】数学自动出题器设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器,使用按键、IIC OLED模块等。 主要功能: 系统运行后,OLED液晶显示出题器开机界面,默认结果范围为100,可按…

对干扰SAY NO!GNSS模拟将提供伽利略OS-NMA功能(二)

上一章主要介绍了OS-NMA架构、测试载体和虹科Safran Skydel仿真引擎中的测试向量。本章将继续为大家介绍虹科Safran GNSS模拟如何使用OS-NMA场景及解决方案等内容。 测试GNSS接收器 在这一部分中,我们将演示如何使用OS-NMA场景,并提供如何修改它们以执…

QT基础入门——QMainWindow与对话框QDialog(三)

前言: Qt 并没有专门的菜单项类,只是使用一个QAction类,抽象出公共的动作。当我们把QAction对象添加到菜单,就显示成一个菜单项,添加到工具栏,就显示成一个工具按钮。用户可以通过点击菜单项、点击工具栏按…

asp.net闲置物品购物网系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net闲置物品购物网系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语 言开发 asp.net 闲置物品购物网 二、功…

2023年中国非晶纳米晶竞争格局、产业链及行业产量分析[图]

非晶合金又称“液态金属、金属玻璃”,是一种新型软磁合金材料,主要包含铁、硅、硼等元素。其主要制品非晶合金薄带的制造工艺是采用急速冷却技术将合金熔液以每秒106℃的速度急速冷却,形成厚度约0.03mm的非晶合金薄带,物理状态表现…

华为云ModelArts:引领AI艺术创作的未来,让人人都可以成为“艺术家”!

随着科技的飞速发展,艺术创作逐渐告别传统的画布和画笔,开始走向数字化、智能化的新时代。在这个蓬勃发展的领域中,华为云ModelArts以其强大的功能和出色的性能引领着AI艺术创作的未来。 华为云ModelArts是面向开发者的一站式AI开发平台,为机器学习与深度学习提供海量数据预处…

【STM32单片机】多功能电子密码锁设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器,使用按键、IIC OLED模块、DS18B20温度传感器、SG90舵机、红外遥控、矩阵按键、EEPROM等。 主要功能: 系统运行后,OLED显示RTC日期…

【前段基础入门之】=>CSS3的新增特性!

文章目录 CSS3概述CSS3私有前缀常见浏览器私有前缀 新增盒模型相关属性怪异盒模型拖拽调整盒子大小盒子阴影不透明度 新增背景属性background-originbackground-clipbackground-size多背景图backgorund 复合属性 新增边框属性边框圆角边框外轮廓 新增文本属性文本阴影文本换行文…

用合成数据训练车辆姿态估计神经网络

我们的客户希望开发一款应用程序,引导用户通过 AR 指南和自动照片拍摄来拍摄更高质量的汽车照片。 本文重点介绍构建汽车姿态估计组件的技术。 在应用程序中,用户被引导站在与汽车一定的角度和距离,以标准化的方式捕捉最好的照片。 当用户处于…

1600*C. Good Subarrays(找规律前缀和)

Problem - 1398C - Codeforces 解析: 可以写出 sum[ j ] - sum[ i ] j - i 1,对其移项得 sum[ j ] - j sum[ i ] - (i - 1),问题转换为有多少个前缀和相等,则用map遍历统计一遍即可。 注意,当…

QMC5883L-磁力计椭球拟合校准

1.概述 磁力计椭球拟合校准是一种将磁力计测量数据校准到真实磁场的技术。这种技术通常使用椭球模型来拟合磁力计的测量结果,然后通过最小二乘法来找到拟合参数的最优解。 2.总体思想 磁力计椭球拟合校准的思想包括以下几个步骤: 1.数据预处理&#x…

Java 21 新功能展示(含示例)

Java 21 于 2023 年 9 月 19 日发布,是 Oracle 标准 Java 实现的下一个长期支持(LTS)版本。Java 21 具有以下 15 项功能。 字符串模板(预览版) [JEP-430] 序列集合 [JEP-431] 代 ZGC [JEP-439] 记录模式…

Helm部署EMQX集群

端口说明: 端口说明集群内端口Nodeport备注mqtt188331274Port for MQTTmqttssl888331170Port for MQTT(SSL)mgmt8081无ws808330099Port for WebSocket/HTTPwss808432580Port for WSS/HTTPSdashboard1808331303Port for dashboard 一、Helm在线部署EMQX集群 1、安…

Compose输入框

TextField label设置提示内容,TextFieldDefaults.textFieldColors设置输入框背景颜色 TextField(modifier Modifier.fillMaxWidth().padding(5.dp),value text.value,onValueChange { text.value it },label { Text(text "请输入内容") },colors …