什么是velocity?

velocity是一个基于Java的模板引擎。你可以使用它来预定义模板,并且对模板进行数据渲染,从而动态生成相应的文本。它如同JSP一样经常被使用在MVC分层架构当中,充当View的责任。为什么说它是基于Java的呢?你可以简单地这样理解:我们可以用Java对象来存放数据,通过Java对象与模板关联,从而把数据渲染到模板当中。

所以,使用velocity你需要做三件事:

1、创建预定义模板

2、定义好数据结构

3、使用模板引擎,将数据渲染到模板当中

使用示例

我们使用maven新建一个简单的Java项目

需要引入依赖:

<dependencies>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>

创建一个预定义模板template.vm,在resources的template/velocity目录下

<!DOCTYPE html>
<html>
<head>
<title>velocity</title>
</head>
<body>
<table>
#foreach($key in $person.keySet())
<tr>
<td>$key:</td>
<td>$person.get($key)</td>
</tr>
#end
</table>
</body>
</html>

我们看到模板当中有一些有点像EL表达式的语法,这是velocity的模板语言简称VTL。

VTL详细内容可以参考官网:http://velocity.apache.org/engine/devel/user-guide.html#velocity-template-language-vtl-an-introduction

这里的模板采用了一个foreach循环,将数据循环遍历出来

写一个测试类VelocityTest

package cn.lay.demo.velocity;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.junit.Test; import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties; /**
* 非单例velocity engine示例
* @author lay
* @date 2018/10/19 00:35
*/
public class VelocityTest { @Test
public void velocityTest() {
// create engine
VelocityEngine engine = new VelocityEngine();
// get template
// get absolute file path without filename
String relativePath = "template/velocity";
String absolutePath = this.getClass().getClassLoader().getResource(relativePath).getPath();
Properties properties = new Properties();
properties.setProperty(engine.FILE_RESOURCE_LOADER_PATH, absolutePath);
// init properties
engine.init(properties);
Template template = engine.getTemplate("template.vm");
// get data
VelocityContext context = new VelocityContext();
Map<String, Object> person = new HashMap<>();
person.put("name", "lay");
person.put("age", 25);
context.put("person", person);
// render
StringWriter writer = new StringWriter();
template.merge(context, writer);
// output
System.out.println(writer.toString());
}
}

测试类中做了几件事,我们先创建了一个engine,然后获取了这个文件的绝对路径(因为是一个Java项目,直接放在了resource下的目录中)。然后将属性文件初始化到engine当中,再读取模板。我们将数据放置到context当中,并定义了一个输出流,使用模板的merge方法进行数据渲染。最后从输出流当中拿到生成的字符串,并输出到控制台。

输出结果为

<!DOCTYPE html>
<html>
<head>
<title>velocity</title>
</head>
<body>
<table>
<tr>
<td>name:</td>
<td>lay</td>
</tr>
<tr>
<td>age:</td>
<td>25</td>
</tr>
</table>
</body>
</html>

velocity可以很方便地动态生成字符串等,经常被用于如:MVC分层、SQL生成、脚本生成等。而通过VTL语言也非常轻易地做到预定义模板,并且快速地渲染数据。

参考:http://velocity.apache.org/engine/devel/index.html

最新文章

  1. 欢迎阅读daxnet的新博客:一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统
  2. TaintDroid剖析之DVM变量级污点跟踪(下篇)
  3. XCODE打包安装包步骤
  4. Java基础毕向东day03
  5. DRLSE 水平集算法总结
  6. Drag &amp; Drop and File Reader
  7. SQL SERVER 2005 同步复制技术(转)
  8. cyq.data开源
  9. fpga串口通信
  10. 鼠标滚动:mousewheel事件在Firefox采用DOMMouseScroll事件的统一处理
  11. MyISAM 和InnoDB 讲解
  12. JavaScript的作用域详解。
  13. plus webview关闭事件监听
  14. Redis批量导入数据的方法
  15. redis命令String类型(四)
  16. django后台将最新文章显示在前面
  17. 雷林鹏分享:C# 类型转换
  18. 将mysql数据库数据以Excel文件的形式导出
  19. PHP搜索 搜索 搜索
  20. TOP100summit 2017:小米唐沐等大咖精心挑选的100个年度研发案例实践

热门文章

  1. jdk动态代理 案例
  2. Linux基础实验(二)
  3. 利用jaxb实现xml和bean的相互转换
  4. Mac下安装HomeBrew
  5. [XHR]——重新认识 XMLHttpRequest
  6. PHP之旅 php数据类型
  7. vscode调试typescript
  8. Eclipse 的SVN 的分支
  9. Java 访问权限控制:你真的了解 protected 关键字吗?
  10. BZOJ3168. [HEOI2013]钙铁锌硒维生素(线性代数+二分图匹配)