标签: velocity杂谈 |
部署 VelocityViewServlet
要把模板功能扩展到 Web 应用程序中,应该使用 Velocity 工具集中的 VelocityViewServlet
。Velocity 工具是 Velocity 的一个子项目(请参阅 参考资料 找到这个 URL 并下载最新的版本)。该 Servlet 为 Velocity 用作一种视图层技术提供了更复杂的支持,既可以与 JSP 技术联合使用也可以代替后者。使用VelocityViewServlet
可以减少许多冗余代码,因为它提供了:
要把 VelocityViewServlet
集成到 Web 应用程序中,可以看一看示例 velview Web 应用程序(在webapps\velview
目录中)。该应用程序包括本文中所讨论的那些模板。此外,它还显示了请求、会话以及 servlet 上下文对象的属性。集成的步骤如下:
首先要保证 velocity-tools-view.jar
文件在应用程序的 lib
目录中。当然,这个 velocity JAR 文件也应该在那儿。
在部署描述符 web.xml 文件中,包括 VelocityViewServlet
。初始化参数是一个工具箱描述 XML 文件。该 servlet 映射为处理所有扩展名为 .vm 的文件,如清单 20 所示:
|
该例子的工具箱描述符(toolbox.xml)文件中,包含了两个来自 Velocity 工具库的通用工具可以在模板DateTool
和 MathTool
中访问。这两个工具使我们能够格式化日期和时间信息,并在模板中执行浮点运算,如清单 21 所示:
|
在 VelocityViewServlet
中有一组常用的标准工具,如表 1 所示:
表 1. VelocityViewServlet 中的标准工具
工具名 | 描述 |
LinkTool |
处理 URI。该工具经常会用到,如果在模板中创建可点击的链接就要用到该工具,可以生成依赖于上下文的 URI 部分。 |
CookieTool |
使模板能够创建或访问浏览器缓冲的 cookie。 |
ParameterParser |
简化后面收到的请求参数的解析。 |
还有两个高度专门化的、不那么常用的工具,如表 2 所示:
表 2. 专门的 VelocityViewServlet 工具
工具名 | 描述 |
ViewRenderTool |
使模板能够解析包含 VTL 的字符串。 |
AbstractSearchTool |
提供了一种骨架工具(必须使用自定义的 Java 代码来扩展),以便实现在线搜索和搜索结果分页。 |
您可以使用 http://localhost:8080/velview/variables.vm
URL 测试 velview 应用程序。您应该打开模板源代码看一看所用的 Velocity 引擎、 LinkTool
和 CookieTool
。
|
|
与 Struts 框架的互操作
Struts 是一种构造基于 MVC 模型的框架的流行 Web 应用程序。Struts 默认的视图组件技术是 JSP 技术。但是,可以很容易把 Velocity 集成进来作为视图组件。图 1 说明了 Velocity 的这种具体应用:
重要的是要看到,在这种结合中 Velocity 并没有代替 JSP 技术。相反,JSP 技术和 Velocity 模板可以协同工作。集成 Velocity 需要配置 VelocityViewServlet
以便处理 .vm 模板,就像 部署 VelocityViewServlet部分所讲的那样。这意味着.jsp 文件将继续由容器(即 Tomcat 5 中的 Jasper)处理,而任何 .vm 模板则传递给 Velocity。
Velocity Tools 子项目中的 VelocityStruts
组件(请参阅 参考资料)包含集成 Velocity 与 Struts 的所有功能。 VelocityStruts
提供了一组专用的 Velocity 工具,用于访问 Struts 专有的资源和 Velocity 模板中的信息。表 3 列出了最常用的工具:
表 3. 用于 VelocityStruts 集成的工具
工具名 | 描述 |
StrutsLinkTool |
针对 Struts 的 LinkTool 专用版本,提供了 setAction() 和 setForward() 访问预先配置的活动映射。 |
FormTool |
访问 Struts 的表单 beans。 |
ErrorsTool |
处理 Struts 错误消息,包括对国际化的支持。 |
MessageTool |
提供对 Struts 国际化支持的访问,尤为特别的是依赖于语言的消息资源。 |
还有一组工具专用于 Struts 1.1 中的新特性,如表 4 所示:
表 4. 专用的 Struts 1.1 访问工具
工具名 | 描述 |
SecureLinkTool |
用于 Struts 1.1 的安全链接(SSL)扩展。 |
ActionMessagesTool |
提供对 Struts 1.1 新对象 ActionMessages 的访问。 |
TilesTool |
提供对 Struts 1.1 Tiles 扩展支持的访问。 |
ValidatorTool |
提供对 Struts 1.1 Validator 扩展的访问,生成代码验证表单输入字段。 |
在 webapps\struts-example
目录中可以找到一个例子,使用 Struts 而非 JSP 技术创建 Struts 页面。本例中我们使用 Struts 取代了实例 Web 应用程序所发布的第一个标题页,您可以试着改变其他的页面。下面列出了操作的步骤。
WEB-INF\lib
目录中。要使用 Tomcat 5(5.0.16 是撰写本文时的最新版本)和 Struts 1.1,需要把以下 JAR 文件复制到 webapps\struts-example\WEB-INF\lib
目录中:
WEB-INF\struts-config.xml
),把 Struts 动作映射设置为转向 index.vm 文件而不是 index.jsp 文件,如清单 22 所示: |
WEB-INF\web.xml
文件中配置 VelocityViewServlet
处理 .vm
文件。同样把欢迎文件设为 index.vm 而非 index.jsp,如清单 23 所示:
|
WEB-INF
目录下。
新的 index.vm 文件如清单 24 所示,可以把它与原来的 index.jsp 文件比较。
$msg.get("index.tour")
|
在 index.vm 中,整个模板都使用 $msg
内的消息工具访问 Struts 的地域有关的国际化资源。通过对包含国际化字符串的资源包的本地化更改,这种方法避免了模板中的多数硬编码字符串。
您可以使用 VTL 的条件指示符 #if
直接检查在 servlet 上下文中是否存在数据库属性。 $application
引用可用于访问 servlet 上下文中的任何属性( $request
、 $response
和 $session
也可用于访问其他 Servlet API 对象的属性)。
LinkTool
的 setURI()
方法用于生成服务器端到 Struts 动作和“Powered by Velocity”标志图片的 URI 链接。注意,这里使用 LinkTool
的 addQueryData()
方法向结果 URI 种增加附加的动作信息。
要测试该 Velocity 页面,您可以启动 Tomcat 5 并访问 http://localhost:8080/struts-example/
URL。注意它的结果与原来的 JSP 版本完全一致。
结束语
Velocity 模板处理程序可以直接集成到 Java 语言应用程序中,立即提供报告生成或者模板处理的功能。
将模板引擎扩展到 Web 应用程序,可以使用 VelocityServlet
处理动态生成 HTML 输出的 Velocity 模板。Velocity 工具项目对使用 VelocityViewServlet
组件化 Web 层应用程序开发提供了更多的支持。VelocityViewServlet
以模板为基础为基于 Web 的 UI 构造提供了方便的视图层。
在使用 MVC 模型框架设计复杂的 Web 应用程序时,Velocity 作为一种视图/模板化技术——以VelocityViewServlet
的形式——可以很方便地插入到框架中。对于流行的 Jakarta Struts MVC 框架,Velocity 可以与基于 JSP 的视图技术协作,也可以和选择的任何模型技术进行交互。