读完之前的介绍性章节之后,你已经不再担忧开始使用Velocity来开发WEB页和独立应用程序了。在你开始钻研语言和应用示例之前,你必须完全设置和配置好开发环境。在这一章里,我们将介绍Velocity的首要条件,同时向你说明如何获取、安装和测试Velocity。我们也将介绍本书示例(依赖于Servlets的示例)将要用到的应用程序服务器的安装过程。如果你是一个开发者,不要担心,我们计划慢慢地对整个安装过程进行讲解,以保证你掌握安装的每一个细节。这对一个开发者来说,是一次很好的实践。
先决条件
Velocity需要你安装下面的包:
■在执行Velocity时,JVM(JAVA虚拟机)中必需的。至少,你应该安装JRE包(JAVA运行时环境)。如果你想编译Velocity,你还需要JAVA 2 SDK (J2SDK);如果你正在使用Servlets或想运行本书上的示例,你必须安装J2SDK。你可以在http://sun.java.com上找到这两个包,在写这本书时,我们创建和执行这些示例采用的是JAVA 1.4.1版本。
■ Velocity依赖于Ant build工具集(Ant是Jakarta项目的一部分)。Ant可以从http://jakarta.apache.org/ant上下载,可以使用1.3或更高的版本。一旦Ant安装好后,需要设置环境参数,以便Ant应用程序能在任务路径下被访问。
获取Velocity
你可以从http://jakarta.apache.org/velocity处下载当前版的Velocity(见Figure 4.1),在release目录下,这里有许多的版本(见Figure 4.2),对于本书来说,我们使用的是1.3.1版本。
Figure 4.1 Velocity主下载页.
Figure 4.2 可用Velocity版本
Figure 4.3 Velocity v1.3.1 files.
如果你的工作平台是Unix/Linux系统,应该选择GZ文件,Windows用户应该选择ZIP文件。两个情况下,都需要将下载的文件解压到的文件夹。
在 UNIX/Linux平台,解压命令是:
gunzip –xvf velocity-1.3.1.tar.gz
解压后,目录(Velocity1.3.1版本)结构应该像Figure 4.4显示的一样。
Figure 4.4 Velocity目录结构
目录说明如下:
/build—全部Ant build脚本
/convert—WebMacro转换模板
/docs—Velocity的HTML格式说明文档
/examples—示例源代码
/src—Velocity, Anakia, 和Texen的资源代码
/test—测试应用和模板
/xdocs—资源文档,它可以编译到不同的输出格式
当你使用任何一种build目标来创建Velocity JAR时,将创建一个/bin文件夹。(下一节介绍)
Velocity版本
Velocity提供了三种不同的打包方式:
■编译时包含全部依赖
■编译时不含依赖
■ 源代码方式
With the first and second flavors, the issue of dependencies arises. In the root Velocity directory, you find two JAR files, like the following:
在第一种和第二种情况下,Velocity已经为你打好了包,在解压后的Velocity根目录里,你将发现两个JAR文件,分别为(对应1.3.1版本):
■ velocity-1.3.1.jar
■ velocity-dep-1.3.1.jar
很明显,文件名velocity-dep代表的是所有依赖已经编译进去。
这些依赖分别为:
Jakarta Commons Collections (Jakarta通用集合)—Velocity需要的解决方案集。
Jakarta Avalon Logkit—如果你的解决方案需要把日志写入到一个文件,则需要这个JAR包
Jakarta ORO—This is required for the 在使用WebMacro模板转换工具集是,这个包是必须的。如果你不想转换任何WebMacro模板(甚至不知道WebMacro),那么就不需要这个包依赖。Velocity开发团队准备各种分离的JARs的目的是为了允许最终开发者可以选择使用Jakarta解决方案或第三方组件。所有依赖都放在/build/lib目录下,如何你想使用其中一个已经编译好的JARs时,你只需要简单将其拷贝到你的项目的classpath下(WEB应用中是WEB-INF/lib)就可以了。
编译Velocity
在第三种情况下(源代码方式),系统被作为需要编译的源文件使用(?)。正如我们之前提到的一样,Velocity是为用Ant工具build而设计的(Ant是一个允许进行组织、编译和部署的JAVA应用程序)。通过build target,Ant将构为Velocity造所有的源代码。构建目标(build target)告诉Ant去执行一些特定的任务。Velocity的Ant任务一般为:
jar-dep—构建一个完整的Velocity JAR,包含前面列出来的全部依赖包,命令为:
ant jar-dep
其结果是构建一个如下文件:
C:"velocity-1.3.1"bin"velocity-dep-1.3.1.jar
jar—同样是构建一个完整的Velocity JAR文件,但这个JAR没有包含依赖包。然而,一旦需要使用Jakarta Commons Collection时,你需要增加这个JAR的路径到你的classpath。如果你必须要使用WebMacro工具集或需要日志功能,这些JARs也必须加到你的classpath中。如果你已经包含了所有的依赖包,你只需要使用jar-def来构建文件既可。命令为:
ant jar
其结果是构建一个如下文件:
C:"velocity-1.3.1"bin"velocity-1.3.1.jar
jar-core—和jar参数一样进行编译Velocity,但它没有包含任何示例和Servlets支持,命令为:
ant jar-core
其结果是构建一个如下文件:
C:"velocity-1.3.1"bin"velocity-core-1.3.1.jar
jar-util—仅仅构建Velocity utilities, Anakia, Texan, 和Web-Macro。命令为:
ant jar-util
其结果是构建一个如下文件:
C:"velocity-1.3.1"bin"velocity-util-1.3.1.jar
jar-servlet—该命令将编译VelocityServlet类,以提供Velocity servlet支持。命令为:
ant jar-servlet
其结果是构建一个如下文件:
C:"velocity-1.3.1"bin"velocity-servlet-1.3.1.jar
jar-J2EE—该将编译一个完整的Velocity JAR,和jar命令一样,但这个命令将包含J2EE JAR文件。该命令需要在/build/lib目录下有j2ee.jar。命令为:
ant jar-J2EE
其结果是构建一个如下文件:
C:"velocity-1.3.1"bin"velocity-J2EEdep-1.3.1.jar
jar-J2EE-dep—该将编译一个完整的具有J2EE支持的Velocity JAR,同时包含之前列出来的依赖包。命令为:
ant jar-J2EE-dep
其结果是构建一个如下文件:
C:"velocity-1.3.1"bin"velocity-J2EE-1.3.1.jar
examples—该命令将编译/examples目录下的所有Velocity示例。命令为:
ant examples
其结果如下:
C:"velocity-1.3.1"bin"forumdemo.war
C:"velocity-1.3.1"examples/appexample1
C:"velocity-1.3.1"examples/appexample2
C:"velocity-1.3."examples/servletexample1
C:"velocity-1.3."examples/servletexample2
C:"velocity-1.3."examples/context_example
C:"velocity-1.3."examples/logger_example
C:"velocity-1.3."examples/xmlapp_example
C:"velocity-1.3."examples/event_example
forumdemo—该命令只构建/forumdemo 目录下的论坛示例。命令为:
ant forumdemo
其结果是构建一个如下文件:
C:"velocity-1.3.1"bin"forumdemo.war
docs—该命令将用Anakia 工具构建具有依赖支持的Velocity文档。Jarkata Site2项目必须事先在电脑上安装,Site2项目的安装目录必须和Velocity的安装目录在同一层,关于Site2项目的信息,你可在http://jakarta.apache.org/site/jakarta-site2.html上找到。另外,你也可以在VC目录下创建一个名叫/jakarta-site的目录,然后把examples/anakia/xdocs目录下的内容全部拷贝到/jakarta-site下。命令为:
ant docs
其结果是在/docs目录构建了一个由HTML文件组成的文档。
docs_print—该命令用于构建一个适合打印的Velocity HTML文档。命令为:
ant docs_print
结果是构建了一个适合打印的Velocity HTML文档。
jar-src—该命令用于把所有的资源代码放入一个JAR文件中。命令为:
ant jar-src
其结果是构建一个如下文件:
C:"velocity-1.3.1"bin"velocity-1.3.1.src.jar
javadocs—该命令用于构建Velocity JavaDoc。命令为:
ant javadocs
其结果是在/examples/api目录下创建一些由JavaDoc组成的文档。
test—该命令用于测试JAR文档是否正确创建。The JAR will be used with a number of smoke tests(未译出。)命令为:
ant test
在本书中的示例中,Velocity JAR使用的是velocity-dep-1.3.1.jar (在Velocity解压目录下)。该JAR文档和用Ant带jar-dep命令创建的文件相同,包含所有的依赖包。
测试Velocity的安装是否正确
After compiling a particular version of Velocity using Ant and the appropriate build target, you should test the compile to be certain it was successful. The developers of Velocity included a test suite in the distribution that you can execute using Ant and the test build target. The Ant task associated with the test suite uses the Velocity JARs found in the /bin directory of the installation when compiling the examples. When you execute the command ant test, the system utilizes JUnit to run through a couple dozen tests.
在用Ant和适当的构建目标编译好一个特定版本的Velocity包后,你就可以测试所编译出来的包是否正确。你可以使用Ant的test参数(Velocity开发团队在Velocity解压目录里提供的)进行测试。配合test suite,Ant任务使用Velocity /bin目录下的JARs文件对示例进行编译。当你执行ant test命令时,系统将利用JUnit来运行这些测试。
运行示例
在创建完Velocity JAR(有或没有依赖包)、测试这些JAR和构建示例之后,就可以执行这些示例来查看Velocity的功能。这里总共有8个示例。
examples/appexample1
本示例是一个在JAVA应用程序里使用Velocity的例子。通过执行example.bat(windows系统)或example.sh (Unix系统)来启动。运行结果为:
Velocity is great!
ArrayList element 1 is great!
ArrayList element 2 is great!
ArrayList element 3 is great!
ArrayList element 4 is great!
The condition is true!
examples/appexample2
本示例是一个使用Velocity输出文本的例子。通过执行example2.bat(windows系统)或example2.sh (Unix系统)来启动。运行结果为:
template : Hello from Velocity in the Jakarta project.
string : We are using Jakarta Velocity to render this.
examples/servletexample1
本示例是一个在Servlet中使用Velocity的例子。运行前,你必须事先在你的电脑上安装一个Servlet引擎才能执行该示例。执行步骤如下:
安装一个Servlet引擎,比如:Resin (www.caucho.com) 或 Tomcat (http://jakarta.apache.org/tomcat/).
1.在Servlet引擎的/docs (Resin) 或 /webapps (Tomcat)目录下创建如下目录结构:
/velocity1/
/velocity1/WEB-INF
/velocity1/WEB-INF/classes
/velocity1/WEB-INF/lib
2. 在Resin下增加一个<web-app> 标记,比如 <web-app id=’velocity1’/>。
3. 拷贝之前创建的Velocity JAR文件到/lib目录
4. 拷贝SampleServlet.class文件到/classes目录
5. 拷贝sample.vm 文件到/velocity1目录
6. 为你的服务器创建一个适当的web.xml文件,比如:
用于Resin服务器时:
<web-app>
<servlet-mapping>
<url-pattern id="/servlet/*"/>
<servlet-name id="invoker"/>
</servlet-mapping>
</web-app>
7. 重启Tomcat(Resin不用重启,它会自动测试应用变更)
8. 在浏览器里输入以下URL:
http://localhost:8080/velocity1/servlet/SampleServlet
Figure 4.5 显示了执行本示例的输出结果
Figure 4.5 Servlet Example1 output.
examples/servletexample2
第二Servlet示例比第一个示例要稍复杂一点,它使用了一个属性文件,并展示了如何加载一个外部的模板文件。其步骤和第一个类似。详细情况你可以查看/examples/servlet_example2目录下的readme.txt文件。
examples/context_example
本示例展示了如何使用上下文。该示例使用了一个存储在数据库里的串行信息文件。本应用假定使用的是MYSQL数据库,并且MYSQL驱动已经加入到classpath中,数据库名叫test,数据库表的定义如下:
create table contextstore(id int not null auto_increment primary key, k varchar(128), val blob);
执行示例的命令为:
C:"velocity-1.3.1"examples"context_example>java –cp "./;../../bin/velocity-dep-1.3.1.jar;" DBContextTest dbtest.vm
输出结果如Figure 4.6所示
Figure 4.6 Context example output.
examples/logger_example
本示例一个Velocity日志使用例子。通过执行logger_example.bat(windows系统)或logger_example.sh (Unix系统)来启动。运行结果为:
Figure 4.7 Logger example output.
examples/xmlapp_example
本示例展示了如何从一个Velocity格式文件和模板导入XML数据。运行本示例需要在classpath里加入 JDom JAR和Apache’s Xerces包。通过执行logger_example.bat(windows系统)或logger_example.sh (Unix系统)来启动。
examples/event_example
本示例展示了如何使用Velocity的事件处理特性。执行示例的命令如下:
java -cp "./;../../bin/velocity-dep-1.3.1.jar;" EventExample
Figure 4.8 显示了执行结果:
Figure 4.8 Event example output.
本章小节和下章介绍
在这一章里,我们提供了一个Velocity获取、安装、分发的全面概览。我们也说明了如何测试编译的操作。另外,我们也仔细查看了Velocity自带的示例。在下一章里,我们将构建我们自己的第一个Velocity应用。