原文連結 http://blog.sina.com.cn/s/blog_530abec50100i1f0.html
Java雜談(五)
本來預計J2se只講了第四篇就收尾了,可是版主厚愛把文章置頂長期讓大家瀏覽讓小弟倍感責任重大,務必追求最到更好,所以關於J2se一些沒有提到的部分,決定再寫幾篇把常用的部分經驗全部寫出來供大家討論切磋。這一篇準備講一講Xml解析包和JavaSwing,然後下一篇再講java.security包關於Java沙箱安全機制和RMI機制,再進入J2ee的部分,暫時就做這樣的計划了。如果由於實習繁忙更新稍微慢了一些,希望各位見諒!
1. Java關於XML的解析
相信大家對XML都不陌生,含義是可延伸標記語言 (XML)。本身它也就是一個資料的載體以樹狀表現形式出現。後來慢慢的資料變成了資訊,區別是資訊可以包括可變的狀態從而針對程式硬式編碼做法變革為針對統一介面寫入程式碼而可變狀態作為資訊進入了XML中儲存。這樣改變狀態實現擴充的唯一工作是在XML中添加一段文本資訊就可以了,代碼不需要改動也不需要重新編譯。這個靈活性是XML誕生時候誰也沒想到的。
當然,如果介面要能提取XML中配置的資訊就需要程式能解析規範的XML檔案,Java中當然要提高包對這個行為進行有利支援。筆者打算講到的兩個包是 org.w3c.dom和javax.xml.parsers和。(大家可以瀏覽一下這些包中間的介面和類定義)
Javax.xml.parsers包很簡單,沒有介面,兩個工廠配兩個解析器。顯然解析XML是有兩種方式的:DOM解析和SAX解析。本質上並沒有誰好誰不好,只是實現的思想不一樣罷了。給一個XML檔案的例子:
<?xml version=”1.0” encoding=”UTF-8”>
<root >
<child name=”Kitty” >
ACat
</child>
</root >
所謂DOM解析的思路是把整個樹狀圖存入記憶體中,需要那個節點只需要在樹上搜尋就可以讀到節點的屬性,內容等,這樣的好處是所有節點皆在記憶體可以反覆搜尋重複使用,缺點是需要消耗相應的記憶體空間。
自然SAX解析的思路就是為了克服DOM的缺點,以事件觸發為基本思路,順序的搜尋下來,碰到了Element之前觸發什麼事件,碰到之後做什麼動作。由於需要自己來寫觸發事件的處理方案,所以需要藉助另外一個自訂的Handler,處於org.xml.sax.helpers包中。它的優點當然是不用整個包都讀入記憶體,缺點也是只能順序搜尋,走完一遍就得重來。
大家很容易就能猜到,接觸到的J2ee架構用的是哪一種,顯然是DOM。因為類似Struts,Hibernate架構設定檔畢竟是很小的一部分配置資訊,而且需要頻繁搜尋來讀取,當然會採用DOM方式(其實SAX內部也是用DOM採用的結構來儲存節點資訊的)。現在無論用什麼架構,還真難發現使用 SAX來解析XML的技術了,如果哪位仁兄知道,請讓筆者也學習學習。
既然解析方式有了,那麼就需要有解析的儲存位置。不知道大家是否發現org.w3c.dom這個包是沒有實作類別全部都是介面的。這裡筆者想說一下Java 如何對XML解析是Jdk應該考慮的事,是它的責任。而w3c組織是維護定義XML標準的組織,所以一個XML結構是怎麼樣的由w3c說了算,它不關心 Java如何去實現,於是乎規定了所有XML儲存的結構應該遵循的規則,這就是org.w3c.dom裡全部的介面目的所在。在筆者看來,簡單理解介面的概念就是實現者必須遵守的原則。
整個XML對應的結構叫Document、子項目對應的叫做Element、還有節點相關的Node、NodeList、Text、Entity、 CharacterData、CDATASection等介面,它們都可以在XML的文法中間找到相對應的含義。由於這裡不是講解XML基本文法,就不多介紹了。如果大家感興趣,筆者也可以專門寫一篇關於XML的文法規則帖與大家分享一下。
2. Java Swing
Swing是一個讓人又愛又恨的東西,可愛之處在於上手很容易,較AWT比起來Swing提供的介面功能更加強大,可恨之處在於編複雜的介面工作量實在是巨大。筆者寫過超過3000行的Swing介面,感覺使用者體驗還不是那麼優秀。最近又寫過超過6000行的,由於功能模組多了,整體效果還只是一般般。體會最深的就一個字:累!所以大家現在都陸續不怎麼用Swing在真正開發的項目上了,太多介面技術可以取代它了。筆者去寫也是迫於無奈組裡面大家都沒寫過,我不入地區誰入?
儘管Swing慢慢的在被人忽略,特別是隨著B/S慢慢的在淹沒C/S,筆者倒是很願意站出來為Swing正身。每一項技術的掌握絕不是為了流行時尚跟風。真正喜歡Java的朋友們還是應該好好體會一下Swing,相信在校的很多學生也很多在學習它。很可能從Jdk1.1、1.2走過來的很多大學老師可能是最不熟悉它的。