Velocity支持通过配置文件修改引擎的一些默认行为。实际上,velocity-1.7.jar
的org.apache.velocity.runtime.defaults
路径下提供了一个默认的配置文件velocity.properties
,同目录下的directive.properties
定义的是velocity的常用指令(如#set
等),我们可以打开观看其具体实现,这里不多做解释。在自定义配置文件时,我们可以基于默认配置文件velocity.properties
作为参考。
以JavaWeb工程为例,我们可以在web.xml
中对org.apache.velocity.tools.view.VelocityViewServlet
加一个参数指定velocity.properties
的路径,下面是一个例子。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Demo VM</display-name>
<servlet>
<servlet-name>velocity</servlet-name>
<servlet-class>org.apache.velocity.tools.view.VelocityViewServlet</servlet-class>
<init-param>
<param-name>org.apache.velocity.properties</param-name>
<param-value>/WEB-INF/velocity.properties</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>
</web-app>
当VelocityViewServlet
拦截到对.vm
的请求时就会自动加载此配置文件,基于自定义配置初始化模板引擎和velocity上下文。这里我们主要了解几个重要的配置,所有配置的详细注释均可在velocity-1.7.jar
内默认配置文件中找到。
如果不配置Velocity的编码,它将使用默认的ISO-8859-1,这通常不是我们想要的结果,我们可以在velocity.properties
中进行编码的配置。
input.encoding=utf-8
output.encoding=utf-8
这样配置后,Velocity就可以在页面正常输出中文了。如果在实际使用中,配置后依然无法正常输出中文,则应考虑HTTP请求、数据库等部分是否正确配置。
我们可以对foreach
迭代的计数器变量名称和判断迭代是否完成的变量名称进行配置,还可以对计数器初始值和最大值进行配置。
directive.foreach.counter.name = velocityCount
directive.foreach.counter.initial.value = 1
directive.foreach.maxloops = -1
directive.foreach.iterator.name = velocityHasNext
#parse()
解析深度默认配置文件中定义了一个解析深度。这个通常不需更改也几乎不会用到,但一旦遇到超过解析深度的情况,我们应该知道这个配置的存在。
directive.parse.max.depth = 10
配置文件中可以指定一个宏定义库,以及宏定义的嵌套深度。
velocimacro.library = VM_global_library.vm
velocimacro.max.depth = 20
可以根据个人习惯设定,具体可以参阅官方User Guide,这里不作介绍。
velocimacro.arguments.strict = false
运行velocity引擎我们会发现多出一个velocity.log
文件,这个就是velocity引擎的运行日志,它的默认文件名为velocity.log
。关闭日志只需将runtime.log.logsystem.class
设定为org.apache.velocity.runtime.log.NullLogChute
即可。
runtime.log.logsystem.class = org.apache.velocity.runtime.log.AvalonLogChute,org.apache.velocity.runtime.log.Log4JLogChute,org.apache.velocity.runtime.log.CommonsLogLogChute,org.apache.velocity.runtime.log.ServletLogChute,org.apache.velocity.runtime.log.JdkLogChute
runtime.log = velocity.log