| 導購 | 订阅 | 在线投稿
分享
 
 
 

XML和JSP交互技術(上)

來源:互聯網  2006-12-16 17:29:12  評論

XML和JSP都是近兩年才出現的技術,目前已經成爲了很多程序員的熱點話題。XML(可擴展的標記語言)是用來定義文檔標記語言的框架,主要用來存儲和發送數據信息,以便各種基于WEB的應用之間能更方便的交換數據。而Jsp是服務器端程序動態設計語言,可以用來設計服務器端各種程序如B2B、B2C等各種系統,由于其面向對象、編譯執行、健壯等特性,也得到了越來越多的應用。

一個很實用的技術就是如何將XML和JSP結合起來,所幸的是我們不用去寫底支持層東西了,因爲很多廠商如SUN、IBM等都發布了自己的支持XML的API,其中SUN公司提供了一個支持在Java下使用XML的API-JAXP(JAVATM API for XML Processing Optional Package),這部分API提供了基本的讀寫、操作XML文檔的功能,通過它我們可以很方便的將XML集成到Java應用程序中來。

目前JAXP的版本是1.1,除了基本XML支持外還支持SAX 2.0 、DOM 2和XSL技術。SUN公司提供的JAXP可以在SUN公司的主頁http://java.sun.com/xml 下載。

一、 JAXP的安裝

1、安裝前請確認您用的是JDK 1.1.8 以上版本的Java環境。

2、在http://java.sun.com/xml 下載JAXP1.1的zip版本,解壓到硬盤中,假定解壓目錄爲#JAXP11,解壓後發現有三個jar文件jaxp.jar crimson.jar xalan.jar,這就是JAXP的核心了。

3、修改系統的CLASSPATH變量,在Windows平台下添加這樣一行:

#JAXP11\jaxp.jar; #JAXP11\crimson.jar; #JAXP11\xalan.jar

在Unix/Linux系統下添加下面一行:

#JAXP11/jaxp.jar: #JAXP11/crimson.jar: #JAXP11/xalan.jar alan.jar

如果你使用的是Java2的話,有一種更簡單的方法,將上面的三個文件直接拷貝到JDK的Lib擴展目錄中去,如#JAVA_HOME/jre/lib/ext(#JAVA_HOME代表JDK目錄),這樣就不用修改CLASSPATH了。

4、好了,安裝完成了,下一步就是編寫程序然後運行了。

二、 簡單的XML例子

XML (EXtensible Markup Language )是一種類似HTML的語言,和HTML不同,XML主要用來描述結構化數據,通過XML格式我們可以很方便的在各種應用程序之間交換數據,而這些都是傳統技術需要花費很大精力才能做到的。

讓我們來看一個簡單的XML文檔例子,這個例子保存了部分個人檔案,請將它保存爲personal.xml文件,因爲後面我們的Jsp文件還會調用它中間的數據。

<個人檔案>

<姓名>劉玉鋒

<性別>男

<年齡>24

coolknight@263.net

<個人主頁>http://www.21jsp.com

<介紹>歡迎大家訪問我的主頁!

是不是很類似于HTML文件,如HTML中的元素"你好"等等,因爲XML和HTML一樣都是標准SGML的子集合,所以有類似之處。但也有很多不同之處需要注意,比如XML文件必須有成對地標記而且大小寫敏感,而這些在HTML中都是默認允許的。

第一行是必須的XML聲明, 我們可以看到聲明是在之間的,中間可以定義部分屬性,version="1.0"表示文檔將使用XML1.0的規範,encoding="gb2312"表示采用中文字符集,這樣我們在下面對于數據就可以使用中文了。

接著就是<個人檔案>標記了,這是XML文件中的根元素,也是不可缺少的,而且必須有一個對應的結束標記,在開始和結束標記之間我們就可以定義自己的數據描述了。

嵌套在<個人檔案>標記如"<姓名>劉玉鋒"就是具體的數據描述了,同根元素一樣必須是成對的標記,在標記中間可以是標記對應具體的數值。這種表示方法有點類似于數據庫中的記錄了,字段名字爲"姓名"、"性別"等,上面的XML文件就相當于一個只有一條記錄的表"個人檔案"。當然在XML文件中可以進行多層嵌套,但這就不在本文的討論範圍了。

當然,這裏只是一個特別簡單能代表XML的例子,XML的相關內容特別多,如果想更多了解XML的話建議還是看相關的書籍。

三、JSP和XML交互

前面已經說過了,Jsp通過SUN公司的API-JAXP可以實現和XML的交互,那麽具體實現主要有兩種方法,一種是采用DOM2 API,另外一種是采用SAX2 API。

||||||在這裏我們主要討論JAXP中的SAX(Simple API for XML Parsing)技術,DOM2技術可以看SUN公司相關的文檔。

1)關于SAX模型

SAX模型是一種處理XML文件的方法,它是事件驅動的,有些類似于AWT中的事件驅動機制,通過事件驅動來識別XML文檔的內容。在API中關于SAX的主要有下面的幾個包:

oorg.xml.sax

oorg.xml.sax.helpers

oorg.xml.sax.ext

在前台的Java程序或者是Jsp程序中通過調用這幾個包中的API就可以很好地實現Java和XML的交互。

2)關于HandlerBase接口

我們知道在AWT中一般是通過實施ActionListener等接口實現事件的處理的,同樣的在SAX中SUN也提供了一個類似的接口HandlerBase來處理XML解析的功能,通過將HandlerBase和XML文件關聯可以很好的來處理XML文件。

在實施接口中我們主要重載三個HandlerBase的方法startElement(String tag, AttributeList attrs)、characters(char[] ch, int start, int length)、endElement(String name)。

startElement()在讀取一行XML數據的開始標記時候觸發,子類必須覆蓋這個方法,這樣就可以在處理XML節點前先進行自己的處理(比如開始讀取或者寫入XML文件中的節點時候)。

public void startElement (String name, AttributeList attributes)

throws SAXException

{

// no op

}

參數name代表XML節點名字,attributes代表默認或者特殊的屬性,這個方法抛出一個違例org.xml.sax.SAXException。

characters()方法主要用來處理和之間具體的數據,在處理節點數據時候觸發,我們可以覆蓋這個方法來進行數據操作的處理,可以添加代碼讀取節點數據值或者是寫入節點數據值。

public void characters (char ch[], int start, int length)

throws SAXException

{

// no op

}

參數ch[]代表一個字符數組,start代表字符數組的開始位置,length代表要取的字符數組中ch[]中的元素個數,同樣的這個方法抛出一個違例org.xml.sax.SAXException。

endElement()方法在處理節點元素結束的時候觸發,也就是碰到標記的時候,我們可以覆蓋這個方法來進行數據的收尾工作,比如將節點數據寫入到文件中。

public void endElement (String name)

throws SAXException

{

// no op

}

參數name代表XML節點名字,這個方法抛出一個違例org.xml.sax.SAXException

從上面我們也可以看出,三個方法在XML事件處理中的順序依次爲:

startElement()àcharacters()àendElement(String name)

也許還不好理解,不要緊在下面我們將會寫一個類myHandler類實現HandlerBase接口,並且覆蓋這三個主要的方法來實現我們的XML文件讀取操作。

3)關于哈希表

由于程序用到了哈希表,所以在這裏先簡單的介紹一下哈希表的基本語法以便大家能更好的理解下面的程序。

哈希表HashTable是從Dictionary派生出來的,裏面具有一系列的關鍵字和數值,一個關鍵字對應一個數值,識別主要是通過對象的哈希代碼hashCode識別。

我們程序中用到的方法如下:

put(Object key,Object value)添加一對關鍵字/數值到哈希表中

get(Object key)根據關鍵字得到它的值

keys()取得所有關鍵字並返回一個集合Enumeration

此外,哈希表還具有其他很多有用的方法如長度size()、是否爲空empty()、是否重複containsKey()等等,限于篇幅在這裏就不進行介紹了。

XML和JSP都是近兩年才出現的技術,目前已經成爲了很多程序員的熱點話題。XML(可擴展的標記語言)是用來定義文檔標記語言的框架,主要用來存儲和發送數據信息,以便各種基于WEB的應用之間能更方便的交換數據。而Jsp是服務器端程序動態設計語言,可以用來設計服務器端各種程序如B2B、B2C等各種系統,由于其面向對象、編譯執行、健壯等特性,也得到了越來越多的應用。   一個很實用的技術就是如何將XML和JSP結合起來,所幸的是我們不用去寫底支持層東西了,因爲很多廠商如SUN、IBM等都發布了自己的支持XML的API,其中SUN公司提供了一個支持在Java下使用XML的API-JAXP(JAVATM API for XML Processing Optional Package),這部分API提供了基本的讀寫、操作XML文檔的功能,通過它我們可以很方便的將XML集成到Java應用程序中來。   目前JAXP的版本是1.1,除了基本XML支持外還支持SAX 2.0 、DOM 2和XSL技術。SUN公司提供的JAXP可以在SUN公司的主頁http://java.sun.com/xml 下載。   一、 JAXP的安裝   1、安裝前請確認您用的是JDK 1.1.8 以上版本的Java環境。   2、在http://java.sun.com/xml 下載JAXP1.1的zip版本,解壓到硬盤中,假定解壓目錄爲#JAXP11,解壓後發現有三個jar文件jaxp.jar crimson.jar xalan.jar,這就是JAXP的核心了。   3、修改系統的CLASSPATH變量,在Windows平台下添加這樣一行:    #JAXP11\jaxp.jar; #JAXP11\crimson.jar; #JAXP11\xalan.jar    在Unix/Linux系統下添加下面一行:    #JAXP11/jaxp.jar: #JAXP11/crimson.jar: #JAXP11/xalan.jar alan.jar 如果你使用的是Java2的話,有一種更簡單的方法,將上面的三個文件直接拷貝到JDK的Lib擴展目錄中去,如#JAVA_HOME/jre/lib/ext(#JAVA_HOME代表JDK目錄),這樣就不用修改CLASSPATH了。   4、好了,安裝完成了,下一步就是編寫程序然後運行了。   二、 簡單的XML例子   XML (EXtensible Markup Language )是一種類似HTML的語言,和HTML不同,XML主要用來描述結構化數據,通過XML格式我們可以很方便的在各種應用程序之間交換數據,而這些都是傳統技術需要花費很大精力才能做到的。   讓我們來看一個簡單的XML文檔例子,這個例子保存了部分個人檔案,請將它保存爲personal.xml文件,因爲後面我們的Jsp文件還會調用它中間的數據。      <個人檔案>   <姓名>劉玉鋒   <性別>男   <年齡>24   coolknight@263.net   <個人主頁>http://www.21jsp.com   <介紹>歡迎大家訪問我的主頁!    是不是很類似于HTML文件,如HTML中的元素"你好"等等,因爲XML和HTML一樣都是標准SGML的子集合,所以有類似之處。但也有很多不同之處需要注意,比如XML文件必須有成對地標記而且大小寫敏感,而這些在HTML中都是默認允許的。   第一行是必須的XML聲明, 我們可以看到聲明是在之間的,中間可以定義部分屬性,version="1.0"表示文檔將使用XML1.0的規範,encoding="gb2312"表示采用中文字符集,這樣我們在下面對于數據就可以使用中文了。   接著就是<個人檔案>標記了,這是XML文件中的根元素,也是不可缺少的,而且必須有一個對應的結束標記,在開始和結束標記之間我們就可以定義自己的數據描述了。   嵌套在<個人檔案>標記如"<姓名>劉玉鋒"就是具體的數據描述了,同根元素一樣必須是成對的標記,在標記中間可以是標記對應具體的數值。這種表示方法有點類似于數據庫中的記錄了,字段名字爲"姓名"、"性別"等,上面的XML文件就相當于一個只有一條記錄的表"個人檔案"。當然在XML文件中可以進行多層嵌套,但這就不在本文的討論範圍了。   當然,這裏只是一個特別簡單能代表XML的例子,XML的相關內容特別多,如果想更多了解XML的話建議還是看相關的書籍。 三、JSP和XML交互   前面已經說過了,Jsp通過SUN公司的API-JAXP可以實現和XML的交互,那麽具體實現主要有兩種方法,一種是采用DOM2 API,另外一種是采用SAX2 API。  |||||| 在這裏我們主要討論JAXP中的SAX(Simple API for XML Parsing)技術,DOM2技術可以看SUN公司相關的文檔。   1)關于SAX模型   SAX模型是一種處理XML文件的方法,它是事件驅動的,有些類似于AWT中的事件驅動機制,通過事件驅動來識別XML文檔的內容。在API中關于SAX的主要有下面的幾個包:   oorg.xml.sax   oorg.xml.sax.helpers   oorg.xml.sax.ext 在前台的Java程序或者是Jsp程序中通過調用這幾個包中的API就可以很好地實現Java和XML的交互。   2)關于HandlerBase接口   我們知道在AWT中一般是通過實施ActionListener等接口實現事件的處理的,同樣的在SAX中SUN也提供了一個類似的接口HandlerBase來處理XML解析的功能,通過將HandlerBase和XML文件關聯可以很好的來處理XML文件。   在實施接口中我們主要重載三個HandlerBase的方法startElement(String tag, AttributeList attrs)、characters(char[] ch, int start, int length)、endElement(String name)。   startElement()在讀取一行XML數據的開始標記時候觸發,子類必須覆蓋這個方法,這樣就可以在處理XML節點前先進行自己的處理(比如開始讀取或者寫入XML文件中的節點時候)。   public void startElement (String name, AttributeList attributes)    throws SAXException    {     // no op     } 參數name代表XML節點名字,attributes代表默認或者特殊的屬性,這個方法抛出一個違例org.xml.sax.SAXException。   characters()方法主要用來處理和之間具體的數據,在處理節點數據時候觸發,我們可以覆蓋這個方法來進行數據操作的處理,可以添加代碼讀取節點數據值或者是寫入節點數據值。   public void characters (char ch[], int start, int length)    throws SAXException    {     // no op     } 參數ch[]代表一個字符數組,start代表字符數組的開始位置,length代表要取的字符數組中ch[]中的元素個數,同樣的這個方法抛出一個違例org.xml.sax.SAXException。   endElement()方法在處理節點元素結束的時候觸發,也就是碰到標記的時候,我們可以覆蓋這個方法來進行數據的收尾工作,比如將節點數據寫入到文件中。   public void endElement (String name)    throws SAXException     {      // no op     } 參數name代表XML節點名字,這個方法抛出一個違例org.xml.sax.SAXException   從上面我們也可以看出,三個方法在XML事件處理中的順序依次爲:    startElement()àcharacters()àendElement(String name) 也許還不好理解,不要緊在下面我們將會寫一個類myHandler類實現HandlerBase接口,並且覆蓋這三個主要的方法來實現我們的XML文件讀取操作。   3)關于哈希表   由于程序用到了哈希表,所以在這裏先簡單的介紹一下哈希表的基本語法以便大家能更好的理解下面的程序。   哈希表HashTable是從Dictionary派生出來的,裏面具有一系列的關鍵字和數值,一個關鍵字對應一個數值,識別主要是通過對象的哈希代碼hashCode識別。   我們程序中用到的方法如下:   put(Object key,Object value)添加一對關鍵字/數值到哈希表中   get(Object key)根據關鍵字得到它的值   keys()取得所有關鍵字並返回一個集合Enumeration 此外,哈希表還具有其他很多有用的方法如長度size()、是否爲空empty()、是否重複containsKey()等等,限于篇幅在這裏就不進行介紹了。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有