CHAPTER 4 安裝Velocity
讀完之前的介紹性章節(jié)之后,你已經(jīng)不再擔(dān)憂開始使用Velocity來開發(fā)WEB頁和獨(dú)立應(yīng)用程序了。在你開始鉆研語言和應(yīng)用示例之前,你必須完全設(shè)置和配置好開發(fā)環(huán)境。在這一章里,我們將介紹Velocity的首要條件,同時(shí)向你說明如何獲取、安裝和測試Velocity。我們也將介紹本書示例(依賴于Servlets的示例)將要用到的應(yīng)用程序服務(wù)器的安裝過程。如果你是一個(gè)開發(fā)者,不要擔(dān)心,我們計(jì)劃慢慢地對整個(gè)安裝過程進(jìn)行講解,以保證你掌握安裝的每一個(gè)細(xì)節(jié)。這對一個(gè)開發(fā)者來說,是一次很好的實(shí)踐。
先決條件
Velocity需要你安裝下面的包:
■在執(zhí)行Velocity時(shí),JVM(JAVA虛擬機(jī))中必需的。至少,你應(yīng)該安裝JRE包(JAVA運(yùn)行時(shí)環(huán)境)。如果你想編譯Velocity,你還需要JAVA 2 SDK (J2SDK);如果你正在使用Servlets或想運(yùn)行本書上的示例,你必須安裝J2SDK。你可以在http://sun.java.com上找到這兩個(gè)包,在寫這本書時(shí),我們創(chuàng)建和執(zhí)行這些示例采用的是JAVA 1.4.1版本。
■ Velocity依賴于Ant build工具集(Ant是Jakarta項(xiàng)目的一部分)。Ant可以從http://jakarta.apache.org/ant上下載,可以使用1.3或更高的版本。一旦Ant安裝好后,需要設(shè)置環(huán)境參數(shù),以便Ant應(yīng)用程序能在任務(wù)路徑下被訪問。
獲取Velocity
你可以從http://jakarta.apache.org/velocity處下載當(dāng)前版的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系統(tǒng),應(yīng)該選擇GZ文件,Windows用戶應(yīng)該選擇ZIP文件。兩個(gè)情況下,都需要將下載的文件解壓到的文件夾。
在 UNIX/Linux平臺,解壓命令是:
gunzip –xvf velocity-1.3.1.tar.gz
解壓后,目錄(Velocity1.3.1版本)結(jié)構(gòu)應(yīng)該像Figure 4.4顯示的一樣。
Figure 4.4 Velocity目錄結(jié)構(gòu)
目錄說明如下:
/build—全部Ant build腳本
/convert—WebMacro轉(zhuǎn)換模板
/docs—Velocity的HTML格式說明文檔
/examples—示例源代碼
/src—Velocity, Anakia, 和Texen的資源代碼
/test—測試應(yīng)用和模板
/xdocs—資源文檔,它可以編譯到不同的輸出格式
當(dāng)你使用任何一種build目標(biāo)來創(chuàng)建Velocity JAR時(shí),將創(chuàng)建一個(gè)/bin文件夾。(下一節(jié)介紹)
Velocity版本
Velocity提供了三種不同的打包方式:
■編譯時(shí)包含全部依賴
■編譯時(shí)不含依賴
■ 源代碼方式
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已經(jīng)為你打好了包,在解壓后的Velocity根目錄里,你將發(fā)現(xiàn)兩個(gè)JAR文件,分別為(對應(yīng)1.3.1版本):
■ velocity-1.3.1.jar
■ velocity-dep-1.3.1.jar
很明顯,文件名velocity-dep代表的是所有依賴已經(jīng)編譯進(jìn)去。
這些依賴分別為:
Jakarta Commons Collections (Jakarta通用集合)—Velocity需要的解決方案集。
Jakarta Avalon Logkit—如果你的解決方案需要把日志寫入到一個(gè)文件,則需要這個(gè)JAR包
Jakarta ORO—This is required for the 在使用WebMacro模板轉(zhuǎn)換工具集是,這個(gè)包是必須的。如果你不想轉(zhuǎn)換任何WebMacro模板(甚至不知道WebMacro),那么就不需要這個(gè)包依賴。Velocity開發(fā)團(tuán)隊(duì)準(zhǔn)備各種分離的JARs的目的是為了允許最終開發(fā)者可以選擇使用Jakarta解決方案或第三方組件。所有依賴都放在/build/lib目錄下,如何你想使用其中一個(gè)已經(jīng)編譯好的JARs時(shí),你只需要簡單將其拷貝到你的項(xiàng)目的classpath下(WEB應(yīng)用中是WEB-INF/lib)就可以了。
編譯Velocity
在第三種情況下(源代碼方式),系統(tǒng)被作為需要編譯的源文件使用(?)。正如我們之前提到的一樣,Velocity是為用Ant工具build而設(shè)計(jì)的(Ant是一個(gè)允許進(jìn)行組織、編譯和部署的JAVA應(yīng)用程序)。通過build target,Ant將構(gòu)為Velocity造所有的源代碼。構(gòu)建目標(biāo)(build target)告訴Ant去執(zhí)行一些特定的任務(wù)。Velocity的Ant任務(wù)一般為:
jar-dep—構(gòu)建一個(gè)完整的Velocity JAR,包含前面列出來的全部依賴包,命令為:
ant jar-dep
其結(jié)果是構(gòu)建一個(gè)如下文件:
C:"velocity-1.3.1"bin"velocity-dep-1.3.1.jar
jar—同樣是構(gòu)建一個(gè)完整的Velocity JAR文件,但這個(gè)JAR沒有包含依賴包。然而,一旦需要使用Jakarta Commons Collection時(shí),你需要增加這個(gè)JAR的路徑到你的classpath。如果你必須要使用WebMacro工具集或需要日志功能,這些JARs也必須加到你的classpath中。如果你已經(jīng)包含了所有的依賴包,你只需要使用jar-def來構(gòu)建文件既可。命令為:
ant jar
其結(jié)果是構(gòu)建一個(gè)如下文件:
C:"velocity-1.3.1"bin"velocity-1.3.1.jar
jar-core—和jar參數(shù)一樣進(jìn)行編譯Velocity,但它沒有包含任何示例和Servlets支持,命令為:
ant jar-core
其結(jié)果是構(gòu)建一個(gè)如下文件:
C:"velocity-1.3.1"bin"velocity-core-1.3.1.jar
jar-util—僅僅構(gòu)建Velocity utilities, Anakia, Texan, 和Web-Macro。命令為:
ant jar-util
其結(jié)果是構(gòu)建一個(gè)如下文件:
C:"velocity-1.3.1"bin"velocity-util-1.3.1.jar
jar-servlet—該命令將編譯VelocityServlet類,以提供Velocity servlet支持。命令為:
ant jar-servlet
其結(jié)果是構(gòu)建一個(gè)如下文件:
C:"velocity-1.3.1"bin"velocity-servlet-1.3.1.jar
jar-J2EE—該將編譯一個(gè)完整的Velocity JAR,和jar命令一樣,但這個(gè)命令將包含J2EE JAR文件。該命令需要在/build/lib目錄下有j2ee.jar。命令為:
ant jar-J2EE
其結(jié)果是構(gòu)建一個(gè)如下文件:
C:"velocity-1.3.1"bin"velocity-J2EEdep-1.3.1.jar
jar-J2EE-dep—該將編譯一個(gè)完整的具有J2EE支持的Velocity JAR,同時(shí)包含之前列出來的依賴包。命令為:
ant jar-J2EE-dep
其結(jié)果是構(gòu)建一個(gè)如下文件:
C:"velocity-1.3.1"bin"velocity-J2EE-1.3.1.jar
examples—該命令將編譯/examples目錄下的所有Velocity示例。命令為:
ant examples
其結(jié)果如下:
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—該命令只構(gòu)建/forumdemo 目錄下的論壇示例。命令為:
ant forumdemo
其結(jié)果是構(gòu)建一個(gè)如下文件:
C:"velocity-1.3.1"bin"forumdemo.war
docs—該命令將用Anakia 工具構(gòu)建具有依賴支持的Velocity文檔。Jarkata Site2項(xiàng)目必須事先在電腦上安裝,Site2項(xiàng)目的安裝目錄必須和Velocity的安裝目錄在同一層,關(guān)于Site2項(xiàng)目的信息,你可在http://jakarta.apache.org/site/jakarta-site2.html上找到。另外,你也可以在VC目錄下創(chuàng)建一個(gè)名叫/jakarta-site的目錄,然后把examples/anakia/xdocs目錄下的內(nèi)容全部拷貝到/jakarta-site下。命令為:
ant docs
其結(jié)果是在/docs目錄構(gòu)建了一個(gè)由HTML文件組成的文檔。
docs_print—該命令用于構(gòu)建一個(gè)適合打印的Velocity HTML文檔。命令為:
ant docs_print
結(jié)果是構(gòu)建了一個(gè)適合打印的Velocity HTML文檔。
jar-src—該命令用于把所有的資源代碼放入一個(gè)JAR文件中。命令為:
ant jar-src
其結(jié)果是構(gòu)建一個(gè)如下文件:
C:"velocity-1.3.1"bin"velocity-1.3.1.src.jar
javadocs—該命令用于構(gòu)建Velocity JavaDoc。命令為:
ant javadocs
其結(jié)果是在/examples/api目錄下創(chuàng)建一些由JavaDoc組成的文檔。
test—該命令用于測試JAR文檔是否正確創(chuàng)建。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命令創(chuàng)建的文件相同,包含所有的依賴包。
測試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和適當(dāng)?shù)臉?gòu)建目標(biāo)編譯好一個(gè)特定版本的Velocity包后,你就可以測試所編譯出來的包是否正確。你可以使用Ant的test參數(shù)(Velocity開發(fā)團(tuán)隊(duì)在Velocity解壓目錄里提供的)進(jìn)行測試。配合test suite,Ant任務(wù)使用Velocity /bin目錄下的JARs文件對示例進(jìn)行編譯。當(dāng)你執(zhí)行ant test命令時(shí),系統(tǒng)將利用JUnit來運(yùn)行這些測試。
運(yùn)行示例
在創(chuàng)建完Velocity JAR(有或沒有依賴包)、測試這些JAR和構(gòu)建示例之后,就可以執(zhí)行這些示例來查看Velocity的功能。這里總共有8個(gè)示例。
examples/appexample1
本示例是一個(gè)在JAVA應(yīng)用程序里使用Velocity的例子。通過執(zhí)行example.bat(windows系統(tǒng))或example.sh (Unix系統(tǒng))來啟動(dòng)。運(yùn)行結(jié)果為:
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
本示例是一個(gè)使用Velocity輸出文本的例子。通過執(zhí)行example2.bat(windows系統(tǒng))或example2.sh (Unix系統(tǒng))來啟動(dòng)。運(yùn)行結(jié)果為:
template : Hello from Velocity in the Jakarta project.
string : We are using Jakarta Velocity to render this.
examples/servletexample1
本示例是一個(gè)在Servlet中使用Velocity的例子。運(yùn)行前,你必須事先在你的電腦上安裝一個(gè)Servlet引擎才能執(zhí)行該示例。執(zhí)行步驟如下:
安裝一個(gè)Servlet引擎,比如:Resin (www.caucho.com) 或 Tomcat (http://jakarta.apache.org/tomcat/).
1.在Servlet引擎的/docs (Resin) 或 /webapps (Tomcat)目錄下創(chuàng)建如下目錄結(jié)構(gòu):
/velocity1/
/velocity1/WEB-INF
/velocity1/WEB-INF/classes
/velocity1/WEB-INF/lib
2. 在Resin下增加一個(gè)<web-app> 標(biāo)記,比如 <web-app id=’velocity1’/>。
3. 拷貝之前創(chuàng)建的Velocity JAR文件到/lib目錄
4. 拷貝SampleServlet.class文件到/classes目錄
5. 拷貝sample.vm 文件到/velocity1目錄
6. 為你的服務(wù)器創(chuàng)建一個(gè)適當(dāng)?shù)?/span>web.xml文件,比如:
用于Resin服務(wù)器時(shí):
<web-app>
<servlet-mapping>
<url-pattern id="/servlet/*"/>
<servlet-name id="invoker"/>
</servlet-mapping>
</web-app>
7. 重啟Tomcat(Resin不用重啟,它會(huì)自動(dòng)測試應(yīng)用變更)
8. 在瀏覽器里輸入以下URL:
http://localhost:8080/velocity1/servlet/SampleServlet
Figure 4.5 顯示了執(zhí)行本示例的輸出結(jié)果
Figure 4.5 Servlet Example1 output.
examples/servletexample2
第二Servlet示例比第一個(gè)示例要稍復(fù)雜一點(diǎn),它使用了一個(gè)屬性文件,并展示了如何加載一個(gè)外部的模板文件。其步驟和第一個(gè)類似。詳細(xì)情況你可以查看/examples/servlet_example2目錄下的readme.txt文件。
examples/context_example
本示例展示了如何使用上下文。該示例使用了一個(gè)存儲(chǔ)在數(shù)據(jù)庫里的串行信息文件。本應(yīng)用假定使用的是MYSQL數(shù)據(jù)庫,并且MYSQL驅(qū)動(dòng)已經(jīng)加入到classpath中,數(shù)據(jù)庫名叫test,數(shù)據(jù)庫表的定義如下:
create table contextstore(id int not null auto_increment primary key, k varchar(128), val blob);
執(zhí)行示例的命令為:
C:"velocity-1.3.1"examples"context_example>java –cp "./;../../bin/velocity-dep-1.3.1.jar;" DBContextTest dbtest.vm
輸出結(jié)果如Figure 4.6所示
Figure 4.6 Context example output.
examples/logger_example
本示例一個(gè)Velocity日志使用例子。通過執(zhí)行logger_example.bat(windows系統(tǒng))或logger_example.sh (Unix系統(tǒng))來啟動(dòng)。運(yùn)行結(jié)果為:
Figure 4.7 Logger example output.
examples/xmlapp_example
本示例展示了如何從一個(gè)Velocity格式文件和模板導(dǎo)入XML數(shù)據(jù)。運(yùn)行本示例需要在classpath里加入 JDom JAR和Apache’s Xerces包。通過執(zhí)行logger_example.bat(windows系統(tǒng))或logger_example.sh (Unix系統(tǒng))來啟動(dòng)。
examples/event_example
本示例展示了如何使用Velocity的事件處理特性。執(zhí)行示例的命令如下:
java -cp "./;../../bin/velocity-dep-1.3.1.jar;" EventExample
Figure 4.8 顯示了執(zhí)行結(jié)果:
Figure 4.8 Event example output.
本章小節(jié)和下章介紹
在這一章里,我們提供了一個(gè)Velocity獲取、安裝、分發(fā)的全面概覽。我們也說明了如何測試編譯的操作。另外,我們也仔細(xì)查看了Velocity自帶的示例。在下一章里,我們將構(gòu)建我們自己的第一個(gè)Velocity應(yīng)用。
posted on 2008-10-12 15:49 KINGWEE 閱讀(1035) 評論(1) 編輯 收藏 所屬分類: Velocity