一、velocity简介
velocity是基于java的模板引擎,分离了java代码与页面。velocity还提供了模板语言vtl(velocity template language),
从而可以方便地对数据访问或者格式化。相对于jsp,velocity不允许在模板中放java代码的。
二、下载
windows下载地址:http://mirrors.tuna.tsinghua.edu.cn/apache//velocity/engine/1.7/velocity-1.7.zip
linux下载地址http://mirrors.tuna.tsinghua.edu.cn/apache//velocity/tools/2.0/velocity-tools-2.0.tar.gz
三、velocity基本规则
在模板vtl中,有一些基本的规则,如下:
a)引用的前面是用$,表示获取或临时存储数据;
b)指令的前面是#,表示执行相关的操作;
c)模板中单独使用变量时,表示将变量的内容输出,如$a;
d)\为转义字符,表示不将后序元素当变量,如\$a
e)变量无值时,如果希望空白显示,可使用$!a,即在$后加!
f)单行注释用## ,多行注释,用#* *#
g)vtl中的变量标识符必须以字母开头
四、常用指令
1、#set
用于变量赋值,注意,双引号内的引用会被解析,单引号的引用不会被解析,如
#set( $a = 1)
#set( $list = ["a","b","c"] )
#set ($a = "$b+$c" )
#set($a = '$b+$c' )
2、#if / #elseif / #else / #end
条件判断语句,如
#if($a>1)
a>1
#end
3、#foreach
循环指令,格式如 #foreach($ref1 in $ref2) [statement] #end ,如
#foreach ($t in $list)
$t
#end
4、#include
包含指令,导入本地文件,同时模板引擎并不处理导入文件的内容,可包含多个,中间用逗号分隔,如:
#include("one.gif“,”two.txt",$threefile)
5、#parse
解析指令,相对#include的,#parse可以对包含的文件,通过模板引擎进行解析,不过包含的文件只能有一个,不能多个。
如:
#parse("a.vm")
6、#stop
停止指令,即停止模板引擎的执行,可用于程序调试,注意不用能在#if和#foreach中使用
7、#macro
宏指令,可用于定义代码段,宏内还可以带参数,
a)不带参数的宏,如
定义宏
#macro(t)
<span>yes</span>
#end
使用宏
#foreach
#t()
#end
b)带参数的宏,如
定义宏
#macro(t $p)
<span>$p</span>
#end
使用宏
#foreach
#t("yse")
#end
五、配置文件velocity.properties配置文件velocity.properties位于下载包的velocity-1.7\src\java\org\apache\velocity\runtime\defaults路径下,
接下来介绍velocity.propertis中的常用配置。
1、日志记录
runtime.log = velocity.log ,日志记录的位置,可绝对路径,也可相对路径
runtime.log.logsystem.class ,日志记录所使用的类
runtime.log.invalid.references = true ,当一个引用无效时,关闭日志输出
2、字符编码
input.encoding=UTF-8 ,输入(模板)的字符编码,可用于改变模板文件中的字符编码
output.encoding=UTF-8,输出的字符编码
3、#foreach指令
directive.foreach.counter.name = velocityCount ,foreach指令中的计数器名称,通过$velocityCount访问
directive.foreach.counter.initial.value = 1 ,计数器初始值,默认为1
directive.foreach.iterator.name = velocityHasNext ,是否有下一个元素的名称
4、#set指令
directive.set.null.allowed = false ,是否允许设置为null
5、#include指令
directive.include.output.errormsg.start = <!-- include error :
directive.include.output.errormsg.end = see error log -->
#include指令出现问题时,错误信息的开始标记和结束标记,只有都定义了,错误信息才会输出,格式为".start msg .end"
6、#parse指令
directive.parse.max.depth = 10 , 定义解析的最大深度
7、模板加载配置
resource.loader = file ,模板加载类型,默认为文件,可定义多个
file.resource.loader.description = Velocity File Resource Loader ,文件加载器描述
file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader ,文件加载器类
file.resource.loader.path = . ,文件模板路径
file.resource.loader.cache = false ,是否使用文件模板缓存
file.resource.loader.modificationCheckInterval = 2 ,检查文件模板修改的时间间隔
string.resource.loader.description = Velocity String Resource Loader 字符串加载器描述
string.resource.loader.class = org.apache.velocity.runtime.resource.loader.StringResourceLoader 字符串加载器类
8、自定义指令
userdirective=com.dragon.velocitystudy.velocity.CacheDirective ,自定义指令