學習XML 的最佳途經是從簡單的開發入手,大膽實踐,循序漸進。 XML 的妙處只有在開發過程中才能深入體會,離開了開發是學不好XML 的。因此學習XML 首先應該建立一個XML 的開發環境。我要跟大家介紹怎麼建立一個基於Java 的XML 開發環境。因為我現在沒辦法用到Linux,所以所有的範例都是在Windows 上做的。但這裡介紹的所有的軟體在Linux 和Windows 上都是可以用的,用法也都大同小異。而且除了Sun 的JRE 以外都是open source 軟體,任何人都可以拿來做任何用途,甚至是商業目的的重新發行。 JRE 也是可以免費下載和使用的,但沒有原始碼。如果您有在Linux 上使用這些軟體的經驗,希望能貢獻給大家。
建立一個XML 的開發環境需要經過以下步驟:
1。安裝Java runtime environment
2。安裝一個Java 編譯器。
3。安裝一個JSP Container。
4。安裝一個支援XSLT 的taglib。
5。安裝一個XML Parser。
6。安裝一個支援XSLT 的瀏覽器。
7。安裝一個XML 檔案的編輯器(可選)。
步驟1。安裝Java runtime environment
推薦使用Sun 的JRE 1.3,可以從這裡下載:
http://java.sun.com/j2se/1.3/jre/download-windows.html
注意:不是JDK 1.3,我們需要的只是JRE 1.3
下載完JRE 1.3 後執行安裝程序,假設安裝在C:JRE1.3 下。然後需要設定三個環境變數。
JAVA_HOME=C:JRE1.3
CLASSPATH=.;C:JRE1.3librt.jar
PATH=%PATH%;C:JRE1.3bin
如果是Windows 95/98/me,將環境變數的設定放在Autoexec.bat 中,然後重新啟動機器,Windows NT/2000 在「我的電腦/屬性」中設定就可以了。
步驟2:安裝一個Java 編譯器。
推薦使用IBM 的jikes,一個高效率的open source 的Java 編譯器。 jikes 的主頁在
http://oss.software.ibm.com/developerworks/opensource/jikes/
最新的版本是1.1.3, 可以從這裡下載:
/u/info_img/2009-07/07/jikes-1_13-mingw-win32.zip
下載後解壓縮,得到一個jikes.exe,放在任何PATH 環境變數中的目錄下,例如C:JRE1.3bin
編輯一個簡單的hello world 程式試試看:
// hello.java
public class hello {
public static void main(String [] args) {
System.out.print("hello, world!n");
}
}
然後編譯
jikes hello.java
如果產生了hello.class 就可以用了。
步驟3。安裝一個JSP Container。
推薦使用Jakarta 的Tomcat 3.2.1。 Tomcat 3.2.1 可從這裡下載:
http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.2.1/bin/
你需要下載jakarta-tomcat-3.2.1.zip 這個檔案如果你是在Windows NT/2000 下安裝,還有win32/i386 目錄下的jk_nt_service.zip 。
下載後解壓縮,假設放在C:tomcat 下然後需要設定一個環境變量
TOMCAT=C:tomcat
為了讓Tomcat 可以使用jikes,你需要做一點點的hack,方法如下:
將tomcat 的lib 目錄下的parser.jar,jaxp.jar,webserver.jar 加入環境變數CLASSPATH,使其生效後執行以下步驟:
cd tomcatsrcorgapachetomcatcontext
編輯檔案WebXmlReader.java,將
// sw.addInitParam("jspCompilerPlugin", "org.apache.jasper.compiler.JikesJavaCompiler");
前的註解去掉
然後編譯
jikes WebXmlReader.java
建立一個暫存目錄,使用jar 工具(可以從JDK 取得) 解壓縮Tomcat 的lib 目錄下的webserver.jar
mkdir t
cd t
jar xvf ..webserver.jar
將orgapachetomcatcontext 下的WebXmlReader*.class 替換為剛才編譯產生的WebXmlReader*.class
然後重新打包:
jar cf webserver.jar .
使用新的webserver.jar 取代Tomcat 的webserver.jar
編輯Tomcat 的conf 目錄中的web.xml,將
<!-- uncomment the following to use Jikes for JSP compilation
<init-param>
<param-name>jspCompilerPlugin</param-name>
<param-value>org.apache.jasper.compiler.JikesJavaCompiler</param-value>
</init-param>
-->
外的註解去掉。
編輯Tomcat 的bin 目錄中的tomcat.bat,將所有的tools.jar 替換為rt.jar
啟動tomcat,運行bin 目錄中的startup.bat。
使用瀏覽器做一下測試,訪問
http://localhost:8080
如果JSP 和Servlet 的例子都能編譯和執行,Tomcat 就可以用了。
停止Tomcat 用shutdown.bat
在Windows NT/2000 下,可以把tomcat 安裝為一個service,方法如下:
將Tomcat 的conf 目錄下的wrapper.properties 拷出來並編輯。將其中的兩個變數
wrapper.tomcat_home
wrapper.java_home
分別設定為TOMCAT 和JRE 的安裝路徑,將所有的tools.jar 替換為rt.jar。
然後運行
jk_nt_service -I Tomcat wrapper.properties
其中Tomcat 是我們安裝的service 的名稱。
進入控制台啟動Tomcat service。 Tomcat service安裝後設定為手動啟動,你可以修改Tomcat service 的屬性使其成為自動啟動。
刪除Tomcat service 用:
jk_nt_service -R Tomcat
步驟4。安裝一個支援XSLT 的taglib。
推薦使用Jakarta Taglibs 中做XSLT 的XSL Taglib
其頁面在http://jakarta.apache.org/taglibs/doc/xsl-doc/intro.html
從該頁面下載XSL Taglib 的snapshot。你也可以下載全部的Jakarta Taglibs,Jakarta Taglibs 的範圍很廣,但這裡我們要用到的只是其中的XSL Taglib。
下載完後解壓縮,將其中的xsl-examples.war 和xsl-doc.war 這兩個檔案拷貝到Tomcat 的webapps 目錄下,然後重新啟動Tomcat。使用瀏覽器訪問
http://localhost:8080/xsl-examples/
執行頁面中的Apply.jsp,如果沒有出錯,顯示了一個有很多表格的頁面,XSL Taglib 就可以用了。
XSL Taglib 的文檔也裝好了,在
http://localhost:8080/xsl-doc/
你可以從這個範例出發,一步一步開始寫自己的XML 處理程序。例如你可以在Tomcat 的server.xml 中加入一個新的Context
<Context path="/jspxml"
docBase="path-to-your-work-directory"
crossContext="false"
debug="0"
reloadable="true" >
</Context>
其中的path-to-your-work-directory 是你的開發目錄。將Tomcat 的webapps/xsl-examples 目錄下的內容原封不動的拷到你的開發目錄,以這個程式為參考開始寫你自己的XML 處理程序。
關於如何使用JSP 做XML 開發可以參考Sun 的whitepaper ,在:http://java.sun.com/products/jsp/pdf/JSPXML.pdf
講的基本上就是我上面告訴你的這種方法。
步驟5。安裝一個XML Parser。
做完了步驟3 和步驟4,你已經有了兩個可用的XML Parser 了,那就是Tomcat 本身使用的Sun 的JAXP 和XSL Taglib 使用的xml.apache.org 的Xerces。 JAXP 包含兩個檔案parser.jar 和jaxp.jar,Xerces 只有一個檔案xerces.jar,這幾個檔案可以從Tomcat 的目錄下找到。
建議使用Xerecs 這個XML Parser,因為它目前已經可以支援XML Schema,而且它是open source 軟體。但這完全是出於個人喜好,Sun 的XML Parser 也是非常出色的。決定使用哪個XML Parser 後將其檔案加入CLASSPATH 中。但不要同時使用兩個XML Parser。 CLASSPATH 生效後你就可以在你的Java 程式中使用JDOM 和SAX 的API 處理XML 檔案了。
關於JDOM 和SAX 適用的場合和用法的例子可以從這裡找到:http://developerlife.com
步驟6。安裝一個支援XSLT 的瀏覽器。
這一步驟並不是必須的,因為我們現在已經可以在Server 端使用XSL Taglib 將XML 檔案轉換為HTML 格式後發給Browser,所以實際上你可以使用任何你喜歡的瀏覽器。但是安裝一個支援XSLT 的瀏覽器可以方便我們的學習。雖然現在我們需要在Server 端做XSLT,但將來支援XSLT 的瀏覽器流行了之後我們甚至連這一步都可以省掉,直接把XML 和XSL 檔案發給瀏覽器就行了。這樣就可以大幅減輕Server 端的負擔,因為做XSLT 可不是一件輕鬆的工作。
推薦使用Mozilla 0.8。說到這裡,你可能又要問了,為什麼不使用IE 4/5 呢? IE 4/5 不是也可以做XSLT 嗎?除了個人喜好以外,我可以舉出3 個使用Mozilla 的理由:
首先Mozilla 支援的XSLT 版本比IE 4/5 要新,IE 4/5 支援的XSLT 不是正式版本,而是草稿。即:http://www.w3.org/TR/WD-xsl ,而Mozilla 支援的XSLT 是XSLT 的正式版本。即:http://www.w3.org/1999/XSL/Transform 。
其次Mozilla 中的XML 應用不僅包含XSLT,還包含RDF,XUL,SVG,MathML 等等,所以Mozilla 對XML 的支援從廣度和深度上都要超過IE 4/5。
第三XML FAQ 的作者對Mozilla 推崇有加,認為Mozilla 對XML 的支援在穩健性上比IE 4/5 好得多。
OK,說了這麼多,現在轉到正題上來,如何使Mozilla 0.8 支援XSLT?
首先,從這裡下載Mozilla 0.8:http://www.mozilla.org/releases/
最新的是0.8.1 版,但是這個版本安裝了支援XSLT 的模組後無法運行,所以目前還只能使用老一點但是比較慢的0.8 版。
如果你不想再要其它諸如SVG/MathML 的功能的話,最方便的方法是使用做好的.exe 檔案安裝。
安裝完畢後,啟動Mozilla,請造訪這個頁面:http://www.mozilla.org/projects/xslt/
頁面裡有一個Install 按鈕,點擊這個按鈕就可以安裝實現XSLT 功能的TransforMiiX 模組。
重新啟動Mozilla,造訪上面提到的頁面。點擊上面simple example 的連結。如果看到的結果與點擊look like 連結看到的結果相同,那麼你的Mozilla 就已經能夠支援XSLT 了。
關於如何設定Mozilla 0.8 支援Java Plug-in 請參考我發佈在XML 版的另一篇文章:基於Mozilla 的XML 用戶端解決方案,這裡就不多說了。
步驟7。安裝一個XML 檔案的編輯器。
這一步就更不是必須的了。你聽過現在還有人用vi 做HTML 頁面嗎?我就見過這樣的人,那就是於明儉老師。在於老師的個人主頁上有樣一句醒目的話:Just vim it ! 實際上你可以使用任何你喜歡的編輯器來編輯XML 文件,但是為了方便那些習慣使用WYSIWYG 編輯器的朋友,我還是推薦幾個比較好的XML 編輯器:
1。 XML Spy:一個功能很全的XML 編輯器,有試用版可以下載。
http://www.xmlspy.com/
2。 EditML Pro:另一個功能比較全的XML 編輯器。
http://www.editml.com
3。 PSGML for Emacs:Emacs,我就不用說什麼了吧?
http://www.lysator.liu.se/projects/about_psgml.html
這裡只是為了錦上添花再介紹一些其它的知識,使用這些知識我們可以建造一個更為強大的開發環境。
步驟8。安裝一個比較好的JSP Framework
推薦使用Struts。 Struts 是Jakarta 專案的子項目,目的是開發一個基於MVC 設計模式的JSP Framework。在Struts 的框架內做開發可以有效分離Web 應用程式的表示層和實作層,提升程式碼的可重複使用性。基於MVC 設計模式的開發也就是所謂的Model 2 開發模式。目前該專案已接近完成,最新的版本是1.0-beta-1。
關於什麼是MVC 設計模式可以參考機械工業出版社的《設計模式》這本書。關於Struts 的用法,可以參考我翻譯的《Struts 使用者指南》,在文章統合裡:http://www.linuxforum.net/doc/strutsuserguide.html
從這裡下載Jakarta Struts:
http://jakarta.apache.org/builds/jakarta-struts/release/v1.0-b1/
你需要下載jakarta-struts-1.0-b1.zip 這個檔案。
將其解壓縮,然後將其中的struts-example.war,struts-documentation.war 這兩個檔案拷到Tomcat 的webapps 目錄下,然後重新啟動Tomcat。使用瀏覽器訪問
http://localhost:8080/struts-example/
運行頁面裡的MailReader 程序,如果能正確註冊就可以用了。
Struts 的文檔也裝好了,在
http://localhost:8080/struts-documentation/
關於如何在自己的開發目錄中使用Struts,請參考Struts 所帶的文件。 Java 版有一些關於Struts 的討論,使用論壇的搜尋功能可以找到。
步驟9。建立與Apache 的連接這已經是老生長談了,我介紹最簡單的方法,使用mod_jk 建立與Apache 的連接。
假設你已經安裝好了Apache,從這裡下載mod_jk:
http://jakarta.apache.org/builds/jakarta-tomcat/release/v3.2.1/bin/win32/i386/
你需要下載mod_jk.zip 這個檔。
將其解壓縮,得到一個mod_jk.dll,拷到Apache 安裝目錄下的modules 目錄中。
修改Apache 的設定檔httpd.conf,加入以下兩行:
Include C:/tomcat/conf/mod_jk.conf-auto
JkMount /*.do ajp12
其中「C:/tomcat」是Tomcat 的安裝目錄。
將index.jsp 加到DirectoryIndex 中,即:
DirectoryIndex index.html index.jsp
如果ServerName 前面有註釋,打開ServerName 前的註釋,將其設定為localhost,即:
ServerName localhost
重新啟動Apache,造訪這個頁面:
http://localhost/examples/
如果能列出jsp 和servlet 目錄,Tomcat 和Apache 的連接就建好了。
OK,說這麼多,其實不過是整理了一下內務。現在內務整理好了,我們可以開始做XML 開發了。 :-)