velocity使用(一)--简介

来源:互联网 发布:网络犯罪的相关罪名 编辑:程序博客网 时间:2024/06/05 05:59

一、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  ,自定义指令