1
使固定后缀名的所有页面都被velocity渲染
web.xml
<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/velocity.properties</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>*.vpage</url-pattern>
</servlet-mapping>
其中velocity.properties(注意classloader和encoding)
tools.view.servlet.error.template = error.vm
tools.view.servlet.layout.directory = /
tools.view.servlet.layout.default.template = default.vm
resource.loader = webapp
webapp.resource.loader.class = org.apache.velocity.tools.view.WebappResourceLoader
webapp.resource.loader.cache = true
webapp.resource.loader.modificationCheckInterval = 2
input.encoding = gbk
output.encoding = gbk
velocimacro.library.autoreload = true
runtime.log.logsystem.class=org.apache.velocity.runtime.log.Log4JLogSystem
runtime.log.logsystem.log4j.logger=velocity
parser.pool.size=50
这样所有.vpage都经过velocity渲染
2
还可以使用tools.xml集中加引用
修改web.xml如下
<servlet> <servlet-name>velocity</servlet-name> <servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class> <init-param> <param-name>org.apache.velocity.toolbox</param-name> <param-value>/WEB-INF/tools.xml</param-value> </init-param> <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>*.vpage</url-pattern> </servlet-mapping>
于是可以在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.sx.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;
}
}
于是vpage可以这样用
<html>
<body >
Hello, $name <br>
$myTool.message <br>
$date.date<br>
</body>
</html>
输出
Hello, severus
message
Sun Jun 07 04:09:09 CST 2009
3
使用macro自定义操作函数。
可以用macro.vm集中定义。
tools.xml集中加引用,macro.vm中集中加函数。
在velocity.properties中加一句
velocimacro.library = WEB-INF/macro.vm
然后macro.vm
#macro(sayHello $name)
$myTool.sayHello($name)
#end
于是可以在vpage中这样用
#sayHello("severus")
输出
say hello by macro severus