分享

Velocity应用(一)

 真爱图书 2012-03-06
第一部分:简介
一、什么是Velocity?

    Velocity 是一个基于java的模板引擎(template engine). 它可以让视图的设计者在web页面中引用java代码中定义的数据对象和命令。Velocity彻底的将避免了在视图设计中出现的java代码, 从而保证了web site的长期可维护性.

    Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。 

       Velocity 的强大之处在于它严格的区分程序开发功能的职责划分。

       任何 Velocity 的应用都包括两个方面:
    第一是: 模板制作,如 hellosite.vm;

    第二是: Java 程序部分 Velocity

    真正的工作原理: Velocity 解决了如何在 Servlet 和 网页之间传递数据的问题,当然这种传输数据的机制是在 MVC 模式上进行的,也就是View 和 Modle , Controller 之间相互独立工作,一方的修改不影响其他方变动,他们之间是通过环境变量(Context)来实现的,当然双方网页制作一方和后台程序一方要相互约定好对所传递变量的命名约定。这样只要双方约定好了变量名字,那么双方就可以独立工作了。 无论页面如何变化,只要变量名不变,那么后台程序就无需改动,前台网页也可以任意由网页制作人员修改。这就是 Velocity 的工作原理。

二、Velocity Template Language (VTL): 介绍

    VTL使用引用(references )这种方式将dynamic content(动态内容,一般指java代码生成的数据对象)加入到你的web site,Velocity中的变量(variable)只是refernce中的一种. Variables是用来描述从引入到视图模板中的java数据对象。当然,java代码也可以从模板的VTL中获取数据.

    理解VTL基础的规则: 以$开头的表示“引用”意思是取得一些东东.而”指示”(Directives)则以#开头来表示,有点“做些什么动作”的意思.

1、注释:单行--##,多行--将它们放入#* 和*#间

2、References(引用)
       VTL中有三种references:变量引用(variables),属性引用(properties)(也是以$开头的合法VTL指示符,随后是”变量名字.变量属性”.)和命令引用(methods). 所有的引用在模板中都表现为一个字符串.

3、正规格式:规则的格式像下面,如你看到的变量名需要放到{}中

4、输出空白Velocity遇到一个不能处理的引用时,一般他会直接输出这个引用$email的写法,页面上会看到的是$email,我们可以在$后面加上一个!号,那么就会输出空白.

5、语义问题

       美元 $2.50输出正确
       转义字符”\”

详细参见:http://www./easyjweb/velocity.htm
Velocity用户手册---中文版(学习修改版)

 
第二部分:基本模板引擎操作

1.使用 Velocity 模板语言创建模板

    Velocity 模板是文本文件(HTML、XML 等等),其中包括:

    (1)照原样合并的静态部分

    (2)将被要合并的数据替代的占位符

    (3)脚本语言中的指示符和指令

2.占位符与引用

    VTL 中的引用是一个命名元素,如 $customerName 。引用可以在 Velocity 模板中作为占位符。在模板合并过程中,这些占位符将被替换成相应的文本值,从而形成最终的输出。示例:

#set( $this = "Velocity")#set( $numericBase = 999 )#set( $booleanCondition = true )This page is generated using $this.There are ($numericBase + 1) pages in total. This page is generated using Velocity.There are (999 + 1) pages in total. 
#set( $newSum = $numericBase + 1)There are $newSum pages in total. 
There are 1000 pages in total. 
#set( $treeList = ["pine", "oak", "maple", "redwood"])您可以使用 $treeList.get(1) 列表中的第二个元素

3.选择性呈现和循环可以使用指示符 #if... #then... #else.... 有条件地呈现模板中特定的部分 

#if $customer.GoldMember  Thank you Mr. $customer.LastName, for flying with us.  Your loyal patronage is greatly appreciated.   This flight earns you an additional 5000 miles.#else Thank you for flying with us.  Please consider joining our frequent flyer program.#endif 
#foreach $name in $treeList<tr><td>     $name is a big tree!</td></tr>#end 4.Velocity 中的宏
Velocity 的一个主要特性是能够很容易地定义宏,称为 Velocimacros。宏使您能够很容易地封装和重用模板脚本。默认情况下,宏保存在 VM_global_library.vm 文件中。

第三部分:在Web中应用Velocity技术

    要把模板功能扩展到 Web 应用程序中,应该使用 Velocity 工具集中的VelocityViewServlet 。Velocity 工具是 Velocity 的一个子项目。该 Servlet 为 Velocity 用作一种视图层技术提供了更复杂的支持,既可以与 JSP 技术联合使用也可以代替后者。使用 VelocityViewServlet 可以减少许多冗余代码,因为它提供了:

    (1) 对请求对象和属性、会话对象和属性以及 servlet 上下文和属性的直接模板访问

    (2)正式的、可外部配置的“工具箱”,可以增加在模板中使用的自定义工具(这里讲的工具只是具有公共方法的已编译的类)

    (3)一个通用的、经过测试的、随时可用的工具库

    集成的步骤如下:

     1、类库。首先要保证 velocity-tools-view.jar 文件在应用程序的 lib 目录中。当然,这个 velocity JAR 文件和commons-beanutils.jar等一些commons包也应该在那儿。

        2、配置web.xml文件。在部署描述符 web.xml 文件中,包括 VelocityViewServlet 。初始化参数是一个工具箱描述 XML 文件。该 servlet 映射为处理所有扩展名为 .vm 的文件,如清单 20 所示: Tomcat 部署描述符(web.xml)

<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE web-app     PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"    "http://java./dtd/web-app_2_3.dtd"><web-app>  <servlet>    <servlet-name>velocityView</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/toolbox.xml</param-value>    </init-param>  </servlet>  <servlet-mapping>    <servlet-name>velocityView</servlet-name>    <url-pattern>*.vm</url-pattern>  </servlet-mapping></web-app>
       3、配置工具箱文件。该例子的工具箱描述符(toolbox.xml)文件中,包含了两个来自 Velocity 工具库的通用工具可以在模板 DateTool 和 MathTool 中访问。这两个工具使我们能够格式化日期和时间信息,并在模板中执行浮点运算,如清单 21 所示: 包括 DateTool 和 MathTool 的工具箱描述符 <?xml version="1.0"?><toolbox>  <tool>   <key>date</key>   <scope>application</scope>   <class>org.apache.velocity.tools.generic.DateTool</class> </tool><tool>  <key>math</key>  <scope>application</scope>  <class>org.apache.velocity.tools.generic.MathTool</class></tool>...

相关知识:在 VelocityViewServlet 中有一组常用的标准工具,如表 1 所示:

表 1. VelocityViewServlet 中的标准工具

工具名
描述 
LinkTool  处理 URI。该工具经常会用到,如果在模板中创建可点击的链接就要用到该工具,可以生成依赖于上下文的 URI 部分。
CookieTool  使模板能够创建或访问浏览器缓冲的 cookie。
ParameterParser  简化后面收到的请求参数的解析。

还有两个高度专门化的、不那么常用的工具,如表 2 所示:

表 2. 专门的 VelocityViewServlet 工具

工具名
描述 
ViewRenderTool  使模板能够解析包含 VTL 的字符串。
AbstractSearchTool  提供了一种骨架工具(必须使用自定义的 Java 代码来扩展),以便实现在线搜索和搜索结果分页。
注:打开模板源代码看一看所用的 Velocity 引擎、 LinkTool 和 CookieTool 。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多