velocity模板引擎-vm语法整理
模板引擎我目前接触过两次,
第一次是在前后端还未分离时,考虑到部分页面数据比较固定,一定时间内不会变动,这样每次从后台加载数据渲染页面明显会消耗性能以及资源浪费,所以使用模板引擎主动生成静态页面,当时使用的是FreeMarker实现的。
第二次是在邮件发送时,想要直接展示制表符等等,使用velocity引擎,vm模板实现。
目录
velocity模板引擎-vm语法整理
一、Velocity 模板引擎介绍
二、入门HelloWord
三、模板基本语法
(一)变量
(二)判断 if
(三)循环 foreach
(四)逻辑运算符 与或非
(五)宏 函数
(六)文件引用
四、常用工具整理
五、velocity模板引擎应用
总结:
一、Velocity 模板引擎介绍
在如今流行的 MVC 架构模式中,软件各个层次的功能更加独立,同时代码的相似度也更加高。为减少软件开发人员的重复劳动,将更多的精力放在业务逻辑以及其他更加具有创造力的工作上。模板引擎在一定程度上解决这个问题。
Velocity 是一个基于 Java 的模板引擎框架,提供的模板语言可以使用在 Java 中定义的对象和变量上。Velocity 是 Apache 基金会的项目,开发的目标是分离 MVC 模式中的持久化层和业务层。但是在实际应用过程中,Velocity 不仅仅被用在了 MVC 的架构中,还可以被用在以下一些场景中。
- Web 应用:开发者在不使用 JSP 的情况下,可以用 Velocity 让 HTML 具有动态内容的特性。
- 源代码生成:Velocity 可以被用来生成 Java 代码、SQL 或者 PostScript。有很多开源和商业开发的软件是使用 Velocity 来开发的。
- 自动 Email:很多软件的用户注册、密码提醒或者报表都是使用 Velocity 来自动生成的。使用 Velocity 可以在文本文件里面生成邮件内容,而不是在 Java 代码中拼接字符串。
- 转换 xml:Velocity 提供一个叫 Anakia 的 ant 任务,可以读取 XML 文件并让它能够被 Velocity 模板读取。一个比较普遍的应用是将 xdoc 文档转换成带样式的 HTML 文件。
二、入门HelloWord
pom引入,目前有2.0新版本
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>velocity-tools</groupId>
<artifactId>velocity-tools</artifactId>
<version>1.4</version>
</dependency>
java代码
package com.cnzz.mytest.velocity;
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.DateTool;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
/**
* ************************************************************
* Copyright © 2020 cnzz Inc.All rights reserved. * **
* ************************************************************
*
* @program: demo
* @description: hellowold
* @author: cnzz
* @create: 2020-11-19 18:48
**/
public class HelloVelocity {
public static void main(String[] args) {
// 初始化模板引擎
VelocityEngine ve = new VelocityEngine();
ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
ve.init();
// 获取模板文件
Template t = ve.getTemplate("template/hellovelocity.vm");
// 设置变量
VelocityContext ctx = new VelocityContext();
ctx.put("name", "Velocity");
//时间工具
ctx.put("date", new DateTool());
//遍历list
List list = new ArrayList();
list.add("1");
list.add("2");
ctx.put("list", list);
// 输出
StringWriter sw = new StringWriter();
t.merge(ctx,sw);
System.out.println(sw.toString());
}
}
vm模板文件
##单行注释
#*
多行注释
*#
## 变量用法打招呼
#set($greet = 'Hello')
#set($greetStr = "I say $greet $name")
$greetStr
#foreach($i in $list)
$i
#end
today is $date
输出效果
vm文件放在resource下就可以
三、模板基本语法
Velocity 中所有的关键字都是以 # 开头的,而所有的变量则是以$开头。Velocity 的语法类似于 JSP 中的 JSTL,甚至可以定义类似于函数的宏。
(一)变量
1、变量的定义
#set关键字定义赋值变量
##1.变量的定义
#set($names ="velocity")
#set($hello ="hello $names")
2、变量的赋值
#set关键字定义赋值变量
##-变量是弱数据类型的,可以在赋了一个 String 给变量之后再赋一个数字或者数组给它。##-六种数据类型赋给Velocity变量:变量引用, 字面字符串, 属性引用, 方法引用, 字面数字, 数组列表。 boolean 类型也可以。
##2. 变量的赋值
##-变量是弱数据类型的,可以在赋了一个 String 给变量之后再赋一个数字或者数组给它。
##-六种数据类型赋给Velocity变量:变量引用, 字面字符串, 属性引用, 方法引用, 字面数字, 数组列表。
#set($test = 1)
#set($test ="cnzz")
#set($array = ["array",1,$test])
#set($obj={"name":"Cnzz","age":18})
#set($obj.name=$test)
3、 变量的使用
##-使用$name 或者 ${name} 来使用定义的变量##-${person.name} 和 ${person.getName()}访问person的name属性 ## $!name与 ${!name}表示值为空时强制空白
##3. 变量的使用
##-使用$name 或者 ${name} 来使用定义的变量
##-${person.name} 和 ${person.getName()}访问person的name属性
## $!name与 ${!name}表示值为空时强制空白
$test
${array}
${obj}
$obj.name
(二)判断 if
条件语句语法
#if(condition)
...
#elseif(condition)
...
#else
...
#end
##二、判断 if
#set($flag = "a")
#if($flag==1)
flag=1
#elseif($flag=="a")
flag=a
#else
flag=null
#end
(三)循环 foreach
## velocityCount是Velocity提供的用来记录当前循环次数的计数器,默认从1开始计数,可以在velocity.properties文件中修改其初始值
## 三、循环
## velocityCount是Velocity提供的用来记录当前循环次数的计数器,默认从1开始计数,可以在velocity.properties文件中修改其初始值
#foreach($item in $list)
This is $item
$velocityCount
#end
(四)逻辑运算符 与或非
##Velocity 引擎提供了 与、或 和 非 操作符,分别对应 &&、|| 和 !
##四、逻辑关系操作符
##Velocity 引擎提供了 与、或 和 非 操作符,分别对应 &&、|| 和 !
#set($var=true)
#set($var1=false)
## 与逻辑
#if($var && $var1)
$var and $var1 = true
#else
$var and $var1 = false
#end
## 或逻辑
#if($var || $var1)
$var or $var1 = true
#else
$var or $var1 = false
#end
## 非逻辑
#if(!$var)
$var not = true
#else
$var not = false
#end
(五)宏 函数
Velocity 中的宏可以理解为函数定义。关键字 #macro
定义语法
#macro(macroName arg1 arg2...)
...
#end
使用语法
#macroName(arg1 arg2...)
##五、宏/函数
## 关键字 #macro
##定义宏
#macro(sayHello $username)
hello $username
#end
##使用宏
#sayHello("cnzz")
(六)文件引用
#parse 和 #include 用来引用外部文件
## #parse 会将引用的内容当成类似于源码文件,会将内容在引入的地方进行解析,## #include 是将引入文件当成资源文件,会将引入内容原封不动地以文本输出。
## 六、#parse 和 #include 外部文件引入
## #parse 会将引用的内容当成类似于源码文件,会将内容在引入的地方进行解析,
## #include 是将引入文件当成资源文件,会将引入内容原封不动地以文本输出。
## foo.vm 内容 #set($name ="velocity")
#parse("foo.vm") ##输出 velocity
#include("foo.vm") ##输出 #set($name =”velocity”)
四、常用工具整理
五、velocity模板引擎应用
总结:
velocity的应用还是入门,后面需要深入学习应用