[/code]使固定后缀名的所有页面都被velocity渲染
[code="java"]
<servlet>
<servlet-name>velocity</servlet-name>
<servlet-class>
org.apache.velocity.tools.view.servlet.VelocityViewServlet
</servlet-class>
<init-param>
<param-name>
org.apache.velocity.properties
</param-name>
<param-value>
/WEB-INF/classes/velocity.properties
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
其中velocity.properties(注意classloader和encoding)
resource.loader = file
file.resource.loader.description = Velocity File Resource Loader
file.resource.loader.class = org.apache.velocity.tools.view.WebappResourceLoader
file.resource.loader.path = ./WEB-INF/templates
file.resource.loader.cache = false
file.resource.loader.modificationCheckInterval = 2
input.encoding=UTF-8
output.encoding=UTF-8
runtime.log.logsystem.class = org.apache.velocity.runtime.log.SimpleLog4JLogSystem
runtime.log.logsystem.log4j.category = velocity_log
runtime.log.error.stacktrace = false
runtime.log.warn.stacktrace = false
runtime.log.info.stacktrace = false
runtime.log.debug.stacktrace = false
runtime.log.invalid.reference = false
可以在tools.xml定义变量、velocity提供的类、以及自己定义的类。下面分别举例
<?xml version="1.0" encoding="UTF-8"?>
<toolbox>
<data>
<key>name</key>
<value>severus</value>
</data>
<tool>
<key>myTool</key>
<class>net.xxx.velocity.tools.MyTool</class>
</tool>
<tool>
<key>date</key>
<scope>request</scope>
<class>org.apache.velocity.tools.generic.DateTool</class>
<parameter name="format" value="yyyy-MM-dd hh:mm:mm"/>
</tool>
</toolbox>
其中MyTool如下
public class MyTool {
public String getMessage() {
return "message";
}
public String sayHello(String s){
return "say hello by macro " + s;
}
}
由于html被定义为velocity,于是html可以这样用
<html>
<body >
Hello, $name <br>
$myTool.message <br>
$date.date<br>
</body>
</html>
解析结果为
Hello, severus
message
Sun Jun 07 04:09:09 CST 2009
使用macro自定义操作函数。
可以用macro.vm集中定义。
tools.xml集中加引用,macro.vm中集中加函数。
在velocity.properties中加一句
velocimacro.library = WEB-INF/macro.vm
然后macro.vm
#macro(sayHello $name)
$myTool.sayHello($name)
#end
于是可以在html中这样用
#sayHello("severus")
say hello by macro severus