velocity模板引擎-vm语法整理

velocity模板引擎-vm语法整理

模板引擎我目前接触过两次,

第一次是在前后端还未分离时,考虑到部分页面数据比较固定,一定时间内不会变动,这样每次从后台加载数据渲染页面明显会消耗性能以及资源浪费,所以使用模板引擎主动生成静态页面,当时使用的是FreeMarker实现的。

第二次是在邮件发送时,想要直接展示制表符等等,使用velocity引擎,vm模板实现。


目录

velocity模板引擎-vm语法整理

一、Velocity 模板引擎介绍

二、入门HelloWord

三、模板基本语法

(一)变量

(二)判断 if 

(三)循环 foreach

(四)逻辑运算符 与或非

(五)宏 函数

 (六)文件引用

四、常用工具整理

五、velocity模板引擎应用

总结:


一、Velocity 模板引擎介绍

        在如今流行的 MVC 架构模式中,软件各个层次的功能更加独立,同时代码的相似度也更加高。为减少软件开发人员的重复劳动,将更多的精力放在业务逻辑以及其他更加具有创造力的工作上。模板引擎在一定程度上解决这个问题。

Velocity 是一个基于 Java 的模板引擎框架,提供的模板语言可以使用在 Java 中定义的对象和变量上。Velocity 是 Apache 基金会的项目,开发的目标是分离 MVC 模式中的持久化层和业务层。但是在实际应用过程中,Velocity 不仅仅被用在了 MVC 的架构中,还可以被用在以下一些场景中。

  1. Web 应用:开发者在不使用 JSP 的情况下,可以用 Velocity 让 HTML 具有动态内容的特性。

  2. 源代码生成:Velocity 可以被用来生成 Java 代码、SQL 或者 PostScript。有很多开源和商业开发的软件是使用 Velocity 来开发的。

  3. 自动 Email:很多软件的用户注册、密码提醒或者报表都是使用 Velocity 来自动生成的。使用 Velocity 可以在文本文件里面生成邮件内容,而不是在 Java 代码中拼接字符串。

  4. 转换 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的应用还是入门,后面需要深入学习应用

参考:

https://developer.ibm.com/zh/articles/j-lo-velocity1/

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值