- 作者简介
- 内容提要
- 关于本书
- 路线图
- 代码规范与下载
- 作者在线
- 封面插图简介
- 前言
- 译者序
- 致谢
- 第1部分 Spring 的核心
- 第1章 Spring 之旅
- 第2章 装配 Bean
- 第3章 高级装配
- 第4章 面向切面的 Spring
- 第2部分 Web 中的 Spring
- 第5章 构建 Spring Web 应用程序
- 第6章 渲染 Web 视图
- 第7章 Spring MVC 的高级技术
- 第8章 使用 Spring Web Flow
- 第9章 保护 Web 应用
- 第3部分 后端中的 Spring
- 第10章 通过 Spring 和 JDBC 征服数据库
- 第11章 使用对象-关系映射持久化数据
- 第12章 使用 NoSQL 数据库
- 第13章 缓存数据
- 第14章 保护方法应用
- 第4部分 Spring 集成
- 第15章 使用远程服务
- 第16章 使用 Spring MVC 创建 REST API
- 第17章 Spring消息
- 第18章 使用 WebSocket 和 STOMP 实现消息功能
- 第19章 使用 Spring 发送 Email
- 第20章 使用 JMX 管理 Spring Bean
- 第21章 借助 Spring Boot 简化 Spring 开发
19.3.1 使用 Velocity 构建 Email 消息
Apache Velocity是由Apache提供的通用模板引擎。Velocity有挺长的历史了,并且已经应用于各种任务中,包括代码生成以及代替JSP。它还能用于格式化富文本Email消息,也就是我们在这里的用法。
为了使用Velocity对Email进行布局,我们需要将VelocityEngine装配到SpitterEmailServiceImpl中。Spring提供了一个名为VelocityEngineFactoryBean的工厂bean,它能够在Spring应用上下文中很便利地生成VelocityEngine。VelocityEngineFactoryBean的声明如下:
VelocityEngineFactoryBean唯一要设置的属性是velocityProperties。在本例中,我们将其配置为从类路径下加载Velocity模板(关于配置Velocity的更多细节,请查阅Velocity文档)。
现在,我们可以将Velocity引擎装配到SpitterEmailServiceImpl中。因为SpitterEmailServiceImpl是使用组件扫描实现自动注册的,我们可以使用@Autowired来自动装配velocityEngine属性:
现在,velocityEngine属性可用了,我们可以使用它将Velocity模板转换为String,并作为Email文本进行发送。为了帮助我们完成这一点,Spring自带了VelocityEngineUtils来简化将Velocity模板与模型数据合并成String的工作。以下是我们可能的使用方式:
为了给处理模板做准备,我们首先创建了一个Map用来保存模板使用的模型数据。在前面字符串拼接的代码中,我们需要Spitter的全名及其Spittle的文本,这里也是一样。为了产生合并后的Email文本,我们只需调用VelocityEngineUtils的mergeTemplateIntoString()方法并将Velocity引擎、模板路径(相对于类路径根)以及模型Map传递进去。
在Java代码中剩下的事情就是得到合并后的Email文本,并将其传递给helper的setText()方法:
模板位于类路径的根目录下,是一个名为emailTemplate.vm的文件,它看起来可能是这样的:
你可以看到,模板文件比前面的字符串拼接版本读起来容易多了。因此,它也更容易维护和编辑。图19.2给出了这种类型Email的一个示例。
在看到图19.2的效果后,我觉得有很多地方可以对模板进行优化从而使得Email看起来更漂亮。但是,我将它作为给读者的练习。
Velocity作为模板引擎已经存在好多年了,并且适用于很多种任务。但是,如第6章所示,一种新的模板方案正在变得日益流行。接下来,我们看一下如何使用Thymeleaf来构建Spittle Email消息。
图19.2 Velocity模板和嵌入的图片能够装扮原本单调乏味的Email
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论