从一坨代码说起

一、前言

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

从一坨代码说起_第1张图片

好吧,其实这是一篇与邮件有关的文章,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标签。

从一坨代码说起_第2张图片

3、代码

从一坨代码说起_第3张图片

4、执行结果

从一坨代码说起_第4张图片

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

四、ThymeLeaf模板引擎源码解读

从一坨代码说起_第5张图片

1、TemplateEngine.initialize

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

2、TemplateManager.parseAndProcess

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

3、输出渲染后的HTML文档

你可能感兴趣的:(不好归类,java,spring,后端)