直播中
xml和jsp是這些日子中最熱的東西。本文介紹如何聯(lián)合這兩種技術(shù)來建設(shè)動態(tài)網(wǎng)站。你還可以同時看一下dom,xpath,xsl,和其它java-xml技術(shù)的示例代碼。
我們在此假設(shè)你已經(jīng)了解javaserver pages(jsp)和extensible markup language (xml)。但也許你對該如何綜合使用它們?nèi)匀挥行┟曰蟆?
jsp的應(yīng)用很容易,你可以用它設(shè)計網(wǎng)頁,使之看起來似乎和html一樣。唯一的不同是jsp是動態(tài)執(zhí)行的。例如,它們可以處理表單form和讀寫數(shù)據(jù)庫。
xml的應(yīng)用的說明則比較困難。似乎所有的產(chǎn)品都支持它,每個人也好象都以各種不同目的在使用它。
在本文中,你可以看到如何使用一種相當(dāng)先進的方式用xml來設(shè)計一個系統(tǒng)。許多站點有巨量數(shù)據(jù)收集并以一種很標準或很不標準的方式來顯示它們。我將設(shè)計一個系統(tǒng),它使用xml文件在web服務(wù)器上進行存儲,并用jsp來顯示數(shù)據(jù)。
xml vs 關(guān)系型數(shù)據(jù)庫
"等一下!"你可能問,"你用xml文件存儲數(shù)據(jù)嗎?為什么不使用數(shù)據(jù)庫?"
這個問題問的很好。我的回答是,對很多目的用途來說,用數(shù)據(jù)庫太過浪費了。.要使用一個數(shù)據(jù)庫,你必須安裝和支持一個分離的服務(wù)器處理進程(a separate server process),它常要求有安裝和支持它的administrator。你必須學(xué)習(xí)sql, 并用sql寫查詢,然后轉(zhuǎn)換數(shù)據(jù),再返回。而如果你用xml文件存儲數(shù)據(jù),將可減少額外的服務(wù)器的負荷。還有,你還找到了一個編輯數(shù)據(jù)的簡單方法。你只要使用文本編輯器,而不必使用復(fù)雜的數(shù)據(jù)庫工具。xml文件很容易備份,和朋友共享,或下載到你的客戶端。同樣的,你可以方便地通過ftp上載新的數(shù)據(jù)到你的站點。
xml還有一個更抽象的優(yōu)點,即作為層次型的格式比關(guān)系型的更好。 它可以用一種很直接的方式來設(shè)計數(shù)據(jù)結(jié)構(gòu)來符合你的需要。你不需要使用一個實體-關(guān)系編輯器,也不需要使你的圖表(schema)標準化。 如果你有一個元素(element)包含了另一個元素,你可以直接在格式中表示它,而不需要使用表的關(guān)聯(lián)。
注意,在很多應(yīng)用中,依靠文件系統(tǒng)是不夠充分的。如果更新很多,文件系統(tǒng)會因為同時寫入而受到破壞。數(shù)據(jù)庫則通常支持事務(wù)處理,可以應(yīng)付所發(fā)生的請求而不至于損壞。對于復(fù)雜的查詢統(tǒng)計要有反復(fù)、及時的更新,此時數(shù)據(jù)庫表現(xiàn)都很優(yōu)秀。當(dāng)然,關(guān)系型數(shù)據(jù)庫還有很多優(yōu)點,包括豐富的查詢語言,圖表化工具,可伸縮性,存取控制等等。
(注意:你可以使用簡單的文件鎖定來提供一個事務(wù)處理服務(wù)器,你還可以在java中執(zhí)行一種 xml index-and-search工具,不過這已經(jīng)是另外一篇文章的主題了。)
在下面這樣的案例中,正如大多數(shù)中小規(guī)模的、基于發(fā)布信息的站點一樣,你可能涉及的大多數(shù)數(shù)據(jù)存取都是讀,而不是寫,數(shù)據(jù)雖然可能很大,但相對來說并沒有經(jīng)常的更新變化,你也不需要做很復(fù)雜的查詢,即使你需要做,也將用一個獨立的查詢工具,那么成熟的rdbms的優(yōu)點消失了,而面向?qū)ο笮偷臄?shù)據(jù)模型的優(yōu)點則可以得到體現(xiàn)。
最后,為你的數(shù)據(jù)庫提供一個查詢器外殼來進行sql查詢并將他們轉(zhuǎn)化進入xml stream也是完全有可能的。
所以你可以選擇這二種方式之一。xml正變成一種非常健壯的,便于編程的工具,作為某個成熟的數(shù)據(jù)庫的前端工具來進行存儲和查詢。(oracle的xsql servlet即是這種技術(shù)的一個很好的例子。)