著名的Open Source論壇Jive有很多東西值得我們分析和學習,通過分析其Jdom的使用機制,我們可以自如方便的讀寫XML配置文件,從而實現下列一些功能:
在配置文件中設置系統語言版本屬性,不同語言版本,系統界面文字不一樣,可以定義自己國家的文字,比如英文版中文簡體版。這樣,可以很方便的將一個系統延伸到各種語言,不用直接修改程序,只要修改XML配置文件就可以。
在配置文件中設置郵件內容,通常一個系統都有各種自動郵件分發,比如用戶注冊成功后,會有一封Email發送到他的信箱,這套系統安裝在不同客戶場合,Email的內容當然不一樣,如A客戶使用了這套系統,當然希望在Email中有A客戶的單位名稱,這些都不必修改程序可以完成。
設置系統的可選屬性,一個系統安裝在不同客戶場合中,客戶的要求總有些不一樣,有些功能是可選的,那么當然這些都要設置在XML配置文件中。
使用XML存放樹形結構記錄是最方便的,尤其對于那些目錄分類系統,如Yahoo,在大分類中有小分類,或者直接是元素我們知道關系數據庫是不擅長存放樹形數據,在關系數據庫中,典型做法是采取兩個表:一個表記錄每個cell;一個表指明其前后關系;但是我們一旦要從這兩張表展開樹形結構,將要在空間和時間上反復平衡。
如果使用XML作為數據源,就很方便解決這個問題,如果配合對XML數據源有很方便的增、修、等功能,那么我們當然選擇XML,實際上,Jdom就方便地提供了這個工具.Jdom是類似DOM SAX之類的XML解析辦法,只適合Java語言,Jdom的特點就是簡單方便。
那么,讓我們來看看Jive是怎么實現上面功能的吧,它是把這些屬性都寫在一個叫jive_config.xml的文件中。這個XML文件的排列方式和使用方式是這樣:
XML文件內容格式:
<!-- root element, all properties must be under this element -->
<jive>
<email>
<fromName>Jive_Administrator</fromName>
<fromEmail>webmaster@example.com</fromEmail>
<subject>Your thread was updated!</subject>
<body>Hello {name}! The thread {threadName} was updated!</body>
</email>
<jive>
其中:
<jive></jive>
是根元素,所有的屬性必須在其中。使用方式也比較簡單,使用標點符號“.”來間隔。比如我們要得到上面的webmaster@example.com的值,那么使用email.fromEmail就可以。在Jive中,具體語句就是JiveGlobals.getJiveProperty("email.fromEmail");這樣獲取值很簡單,而且明了,無論XML樹形結構有多深,我們都可以方便的獲取。
這里關鍵的是一個使用Jdom來解析XML文件的類:XMLProperties ,其中實現了幾個主要操作方法:
獲得(查詢):getProperty(name) ;
新增修改:properties.setProperty(name, value);
刪除:properties.deleteProperty(name) ;
這幾個方法是不是很類似Hasntable的方法?Hashtable中數據是存放在內存中,而XML是存放在文件系統,無疑我們可以象使用hashtable一樣方便的使用XML。
XMLProperties我們可以原封不動的拷貝到我們系統中。唯一要做的就是編制類似Jive的JiveGlobals,其實這也很簡單,分兩步:先load取出XML文件;然后就提供getProperty(name)等方法。如
public class JiveGlobals {
private static final String JIVE_CONFIG_FILENAME = "jive_config.xml";
....
public static String getJiveProperty(String name) {
loadProperties();
return properties.getProperty(name);
}
....
private synchronized static void loadProperties() {
if (properties == null) {
//Create a manager with the full path to the xml config file.
properties = new XMLProperties(jiveHome + File.separator +
JIVE_CONFIG_FILENAME);
}
}
}
當然,所有這些前提,是到http://www.jdom.org下載Jdom包,并加入到Tomcat的common/lib中,或者放入Classpath中。
其他輔助文件有:DataFormatFilter.java DataUnformatFilter.java XMLFilterBase.java。如果你對Jdom具體每一句是如何使用的,可以仔細研究XMLProperties,很容易理解的.