应该算是Velocity的扩展,为了Velocity更好用。包括GenericTools VelocityView VelocityStruts三个子项目,其中VelocityStruts是为了与struts整合服务,此处不介绍。
为j2se提供tools使用,具体tools如下:
DateTool: 对Date操作:格式化、比较等
EscapeTool:对template进行escaping
IteratorTool:更好地控制 #foreach loop
ListTool:透明地处理array和list
MathTool:数学运算
NumberTool:对数字格式化和convert
RenderTool:对VTL的字符串执行 eval
ResourceTool:国际化支持
SortTool:对collections array iterator进行排序
XMLTool:对xml文件读取,需要dom4j的支持
使用velocity快速且干净地构建应用程序,可以编写独立于特定技术的前台程序
包含GenericTool,以及为J2EE扩展的tool;
有VelocityViewServlet VelocityLayoutServlet VelocityViewTag(嵌入velocity到jsp) Maven plugin
就是一个servlet,用于向vm文件的context中插入 request response context对象。
1. 编写vm文件作为页面
<html> <body> I'm a velocity template. #if( $XHTML ) #set( $br = "<br />" ) #else #set( $br = "<br>" ) #end Here we use a custom tool: $toytool.message $br Here we get the date from the DateTool: $date.medium </body> </html>
2. Toolbox.xml
被自动加载到velocity的context
<tools> <data type="boolean" key="xhtml" value="true"/> <data type="boolean" key="isSimple" value="true"/> <data type="number" key="version" value="2.0"/> <data key="foo">this is foo</data> <data key="bar">this is bar.</data> <toolbox scope="request"> <tool key="toytool" class="ToyTool" restrictTo="index*"/> </toolbox> <toolbox scope="session"> <tool key="map" class="java.util.HashMap"/> </toolbox> </tools>
data用来定义常量, tool获取session和request中的数据
3. 配置web.xml文件
<!-- Define Velocity template compiler --> <servlet> <servlet-name>velocity</servlet-name> <servlet-class> org.apache.velocity.tools.view.servlet.VelocityViewServlet </servlet-class> <!-- Unless you plan to put your toolbox.xml and velocity.properties under different folders or give them different names, then these two init-params are unnecessary as of VelocityTools 1.3. The VelocityViewServlet will automatically look for these files in the following locations. --> <init-param> <param-name>org.apache.velocity.toolbox</param-name> <param-value>/WEB-INF/toolbox.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> <!-- Map *.vm files to Velocity --> <servlet-mapping> <servlet-name>velocity</servlet-name> <url-pattern>*.vm</url-pattern> </servlet-mapping>
4. 访问页面
http://localhost:8080/simple/index.vm
定义request session application范围的变量或常量数据,可以调用该变量的方法,使用方法如下:
PipeWrench.java
public class PipeWrench { public String getSize() { return "Large Pipe Wrench!"; } }
ToolBox.xml
<?xml version="1.0"?> <toolbox> <tool> <key>wrench</key> <scope>request</scope> <request-path>/catalog/*</request-path> <class>PipeWrench</class> </tool> </toolbox>
Tool Scope
支持request session application三种scope,用过flex的人应该很熟悉了,application在系统启动时实例化。 Session在每个会话开始时实例化,request为每个请求
如果tool实现 ViewTool 接口,可在init函数中接收到 context对象。
Request-path
限制哪个path下的内容可以访问,只支持request
Parameter
可以像tool中传入参数,需要tool定义public void configure(java.util.Map params)
方法
Data
定义 strings, booleans, and numbers
<?xml version="1.0"?> <toolbox> <data type="number"> <key>app_version</key> <value>0.9</value> </data> <data type="string"> <key>app_name</key> <value>Jon's Tool Shop</value> </data> <data type="boolean"> <key>debug</key> <value>true</value> </data> </toolbox>
在vm中 $app_version 访问
AbstractSearchTool:进行查询和分页,需要实现executeQuery方法
PagerTool:基于request的分页
BrowserTool:获取客户端的浏览器、操作系统等相关信息
CookieTool:Cookie的控制
LinkTool:格式化和组装超链接,获取url的相对和绝对路径
ImportTool:以字符串方式导入 url指定的文件
ViewRenderTool:使用当前context执行带VTL的字符串,并以字符串形式返回结果
是VelocityViewServlet的子类,提供了layout和error的支持,特性如下:
1. 修改web.xml 将VelocityViewServlet替换为VelocityLayoutServlet
2. 定义了layou 的vm
3. 使用content vm和layout vm组合生成页面,在layout vm中,使用$screen_context引用content vm。
4. 可选定义 “error” template显示错误
在velocity.properties 中配置 # Filepath for error template, # relative to web application root directory tools.view.servlet.error.template = Error.vm # Directory for layout templates, # relative to web application root directory tools.view.servlet.layout.directory = layout/ # Filepath of the default layout template # relative to the layout directory # NOT relative to the root directory of the webapp! tools.view.servlet.layout.default.template = Default.vm
在url参数中传入 layout=OtherLayout.vm
在内容页面vm中定义 #set($layout=”OtherLayout.vm”)
对未捕获的异常和错误处理,有两个变量 $error_cause和$stack_trace,可以在$error_screen中输出错误信息
通过实现 ReferenceInsertionEventHandler 对引用做字符转义,在velocity.properties中配置:
eventhandler.referenceinsertion.class = org.apache.velocity.app.event.implement.EscapeHtmlReference
eventhandler.escape.html.match = /msg.*/
是一个jsp tag,允许在jsp中使用velocity和velocity tools,在jsp中使用如下:
<%@taglib prefix="velocity" uri="http://velocity.apache.org/velocity-view" %> <velocity:view template="foo.vm"/>
Anakia 是一个用XSL从XML 中输出视图的例
Texen:用于产生任意文本的工具,It is capable of producing almost any sort of text output. Driven by Ant, essentially an Ant Task
DocBook Framework:创建适合于online查看和打印的文本,如PDF和HTML
DVSL:类似于XSLT,完成xml文件的转换