velocity模板引擎学习(4)-在standalone的java application中使用velocity及velocity-tools
时间:2022-04-23
本文章向大家介绍velocity模板引擎学习(4)-在standalone的java application中使用velocity及velocity-tools,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
通常velocity是配合spring mvc之类的框架在web中使用,但velocity本身其实对运行环境没有过多的限制,在单独的java application中也可以独立使用,下面演示了利用velocity模板引擎生成 『每日发货单』邮件内容:
一、先定义邮件内容模板:mail-template.vm
<string>用户,您好:</string>
<h2>以下是 $date.format('yyyy-MM-dd',$model.deliverDate,$convert.toLocale("en_US")) 的发货清单,请核对!</h2>
<ul>
#foreach ($item in $model.items)
<li>$velocityCount . $item.productName / $item.productNum 件</li>
#end
</ul>
这里面涉及到二个java类:Order(发货订单)及OrderItem(订单明细)
import java.util.Date;
import java.util.List;
public class Order {
private Date deliverDate;
private List<OrderItem> items;
public Date getDeliverDate() {
return deliverDate;
}
public void setDeliverDate(Date deliverDate) {
this.deliverDate = deliverDate;
}
public List<OrderItem> getItems() {
return items;
}
public void setItems(List<OrderItem> items) {
this.items = items;
}
}
及
public class OrderItem {
private String productName;
private int productNum;
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public int getProductNum() {
return productNum;
}
public void setProductNum(int productNum) {
this.productNum = productNum;
}
}
二、使用示例
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
import org.apache.velocity.tools.generic.ConversionTool;
import org.apache.velocity.tools.generic.DateTool;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Date;
public class VelocityTest {
public static void main(String[] args) {
VelocityEngine ve = new VelocityEngine();
//定义vm资源加载的路径为classpath所在目录
ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
ve.init();
//加载模板
Template t = ve.getTemplate("mail-template.vm", "utf-8");
VelocityContext ctx = new VelocityContext();
//加载velocity-tools
ctx.put("date", new DateTool());
ctx.put("convert", new ConversionTool());
//放入要绑定的对象
ctx.put("model", getOrder());
StringWriter sw = new StringWriter();
t.merge(ctx, sw);
//输出
System.out.println(sw.toString());
}
private static Order getOrder() {
Order o = new Order();
o.setDeliverDate(new Date());
o.setItems(new ArrayList<OrderItem>());
OrderItem item1 = new OrderItem();
item1.setProductName("iphone");
item1.setProductNum(1);
OrderItem item2 = new OrderItem();
item2.setProductName("mac pro");
item2.setProductNum(2);
o.getItems().add(item1);
o.getItems().add(item2);
return o;
}
}
运行的输出结果:
<string>用户 您好:</string>
<h2>以下是 2015-09-12 的发货清单,请核对!</h2>
<ul>
<li>1 . iphone / 1 件</li>
<li>2 . mac pro / 2 件</li>
</ul>
参考文章:
http://www.ibm.com/developerworks/cn/java/j-lo-velocity1/index.html
- Spring5以来注册Bean的各种姿势,特别最后的纯编码注册值得尝试
- ONOS一键安装脚本
- Spring 5 新增全新的reactive web框架:webflux
- 认证鉴权与API权限控制在微服务架构中的设计与实现(一)
- 在服务器上利用docker快速部署博客—jpress
- NSQ深入与实践
- 排序算法性能比较
- 上一期前端面试题整理答案
- 自己动手用Socket写一个HttpClient发送GET请求
- Ryu:模块间通信机制分析
- 异地双活实践笔记
- OpenStack Neutron中的DVR简介与OVS流表分析
- Python爬虫,带你制作高逼格的数据聚合云图
- nodejs+ftp+linux+nginx 自动部署前端
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 启动时间的一些分析
- 1.HTML基础知识-HTML进阶
- 浅析一个postgresql的死锁问题
- 你的第一个React App (二 ) - 应用组件开发
- 在Angular应用里使用Redux
- Elasticsearch 日志配置详解
- Cypress系列(52)- fixture() 命令详解
- Docker学习笔记---Dockerfile
- Java面试高频知识点汇总 JVM专题
- Java面试高频知识点汇总 网络协议专题
- 「Mysql优化大师一」mysql服务性能剖析工具
- FPGA设计心得(12)如何正确使用 in_system_ibert ?
- Java面试高频知识点汇总 垃圾回收(GC)机制专题
- Celery-分布式任务队列学习笔记
- Java面试高频知识点汇总 数据库专题