Velocity是什么?

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人 员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。

Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。

Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也 可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。

1、maven加入依赖

  1. <dependency>
  2. <groupId>org.apache.velocity</groupId>
  3. <artifactId>velocity</artifactId>
  4. <version>1.7</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>velocity-tools</groupId>
  8. <artifactId>velocity-tools</artifactId>
  9. <version>1.4</version>
  10. </dependency>

2、velocity的语法符号大概分二类,

  • 一类用 # 开头,代表控制符号,#set表示定义变量;
  • 一类用 $ 开头,通常用于显示变量"#"用来标识Velocity的关键字,包括#set、#if 、#else、#end、#foreach、#end、#include、#parse、#macro等;
  • $ 用来标识Velocity的变量;如:$i、$msg、$TagUtil.options(...)等。
  • { } 用来明确标识Velocity变量;比如在页面中,页面中有一个$someonename,此时,Velocity将把someonename作为变量名,若我们程序是想在someone这个变量的后面紧接着显示name字符,则上面的标签应该改成${someone}name。
  • ! 用来强制把不存在的变量显示为空白。如:当找不到username的时候,$username返回字符串"$username",而$!username返回空字符串""

velocity基本语法

变量定义

  1. #set($name ="velocity")

变量赋值

  1. #set($hello ="hello $name")

这个等式将会给$hello赋值为"velocity"

循环

  1. #foreach($element in $list)
  2. <span>$!element</span><br>
  3. #end

Velocity引擎会将list中的值循环赋给element变量

条件语句

  1. #if(condition)
  2. ...
  3. #elseif(condition)

  4. #else

  5. #end

关系操作符

Velocity引擎提供了AND、OR和NOT操作符,分别对应 &&||!

例如:

  1. #if($foo && $bar)
  2. ...
  3. #end



Velocity中的宏可以理解为函数定义。定义的语法如下:

  1. #macro(macroName arg1 arg2 ...)
  2. ...
  3. #end

调用这个宏的语法是:

  1. #macroName(arg1 arg2 ...)

这里的参数之间使用空格隔开,下面是定义和使用Velocity宏的例子:

  1. #macro(sayHello $name)
  2. hello $name
  3. #end
  4. #sayHello("velocity")

输出的结果为 :hello velocity


#parse 和 #include

parse和#include指令的功能都是在外部引用文件,而两者的区别是:

  • parse会将引用的内容当成类似于源码文件,会将内容在引入的地方进行解析,

  • include 是将引入文件当成资源文件,会将引入内容原封不动地以文本输出。

分别看以下例子:

foo.vm文件中:

  1. #set($name = "velocity")

parse.vm文件中:

  1. #parse("foo.vm")

输出结果为:velocity

include.vm文件中:

  1. #include("foo.vm")

输出结果为:#set($name = "velocity")


单行注释

  1. ##单行注释

多行注释

  1. #\*
  2. 多行注释
  3. \*#

单双引号:单引号不解析引用内容,

双引号:解析引用内容

  1. #set ($var="hello")
  2. '$var' ##结果为:$var
  3. "$var" ##结果为:hello

属性通过 . 操作符使用变量内容

  1. \$Identifier.Identifier
  2. \$user.name

学习-velocity的更多相关文章

  1. velocity的基础使用

    velocity的基本使用要求:掌握jsp的jstl技术,因为velocity的用法和jstl非常相似.语法上差别不大,但是velocity的示例明显比jstl少,解释也少,所以使用velocity必 ...

  2. velocity模板引擎学习(1)

    velocity与freemaker.jstl并称为java web开发三大标签技术,而且velocity在codeplex上还有.net的移植版本NVelocity,(注:castle团队在gith ...

  3. 一个Velocity Template Language学习的框架

    Velocity Template Language(VTL)使得数据展示和后台代码的开发分离开来,最初用在基于servlet的网站开发上,它的这一特性使得它在应付MVC Web开发模式时显得尤其合适 ...

  4. Velocity学习

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11790482.html Velocity学习: 1. velocity对大小写敏感 2. ve ...

  5. UNITY3D单词学习 speed和velocity的区别

    在日常用语中,这两个词没有区别,可以通用. 而在物理学里,velocity 是一个矢量(vector quantity)表示起点与终点间直线距离的长度除以所用时间所得的量,并注明方向;而 speed ...

  6. velocity模板引擎学习(4)-在standalone的java application中使用velocity及velocity-tools

    通常velocity是配合spring mvc之类的框架在web中使用,但velocity本身其实对运行环境没有过多的限制,在单独的java application中也可以独立使用,下面演示了利用ve ...

  7. velocity模板引擎学习(3)-异常处理

    按上回继续,前面写过一篇Spring MVC下的异常处理.及Spring MVC下的ajax异常处理,今天看下换成velocity模板引擎后,如何处理异常页面: 一.404错误.500错误 <e ...

  8. velocity模板引擎学习(2)-velocity tools 2.0

    使用velocity后,原来的很多标签无法使用了,必须借助velocity tools来完成,目前velocity tools最新版本是2.0,下面是velocity tools的一些注意事项: 1. ...

  9. javascript动画:velocity.js学习

    第二章:基础知识 一.velocity和jQuery: Velocity函数是独立于jQuery的,但两者可以结合使用.通常这么做的好处是可以利用jQuery的链式操作:当你先用jQuery选择了一个 ...

随机推荐

  1. Codeforces Round 589 (Div. 2) 题解

    Is that a kind of fetishism? No, he is objectively a god. 见识了一把 Mcdic 究竟出题有多神. (虽然感觉还是吹过头了) 开了场 Virt ...

  2. 解决Warning: Permanently added ' 192.168.1.230'(RSA) to the list of known hosts.

    前提 当我在刚安装的Red Hat Linux5.x系统中进行ssh 192.168.1.230 远程时,出现以下错误: Warning: Permanently added ' 192.168.1. ...

  3. 洛谷 P2656 (缩点 + DAG图上DP)

    ### 洛谷 P2656 题目链接 ### 题目大意: 小胖和ZYR要去ESQMS森林采蘑菇. ESQMS森林间有N个小树丛,M条小径,每条小径都是单向的,连接两个小树丛,上面都有一定数量的蘑菇.小胖 ...

  4. COMP222 - 2019

    COMP222 - 2019 - Second CA AssignmentIndividual courseworkTrain Deep Learning AgentsAssessment Infor ...

  5. HTML+CSS基础 并集选择器

    并集选择器.a,.b

  6. 压缩20M文件从30秒到1秒的优化过程

    文章来源公众号:IT牧场 有一个需求需要将前端传过来的10张照片,然后后端进行处理以后压缩成一个压缩包通过网络流传输出去.之前没有接触过用Java压缩文件的,所以就直接上网找了一个例子改了一下用了,改 ...

  7. Zabbix-proxy和Zabbix-agent源码安装

    一 .Zabbix Proxy 概述 Zabbix proxy 是一个可以从一个或多个受监控设备采集监控数据并将信息发送到 Zabbix server 的进程,主要是代表 Zabbix server ...

  8. CentOS7系统yum方式安装MySQL5.7

    参考:https://www.cnblogs.com/bigbrotherer/p/7241845.html#top 1.在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要, ...

  9. kafka中消费者消费消息之每个线程维护一个KafkaConsumer实例

    1.首先启动自己的kafka集群哟. 启动zk: bin/zkServer.sh start conf/zoo.cfg. 验证zk是否启动成功: bin/zkServer.sh status conf ...

  10. AspNetCore.Identity详解1——入门使用

    今年在面试的时候被问到单点登录的知识,当时支支吾吾不知该如何作答,于是面试失败.回到住所便开始上网查找资料,但苦于难于找到详尽的demo,总是无法入门.又由于我正在学习了解asp.net core,里 ...