(轉(zhuǎn))應(yīng)用JDOM處理數(shù)據(jù)庫到XML轉(zhuǎn)換的JSP實現(xiàn)
一、
JDOM
介紹
我們知道 DOM 是用于與平臺和語言無關(guān)的方式表示 XML 文檔的官方 W3C 標(biāo)準(zhǔn),利用 DOM 和 SAX API 可以解析和處理 XML 文檔。這里我們介紹的 JDOM 是基于樹操作的純 JAVA API ,應(yīng)該說它提供的是一套用于解析、創(chuàng)建、處理和實現(xiàn) XML 的解決方案。這些 API 比 DOM 和 SAX API 提供的方法更為直觀,對于有 JAVA 經(jīng)驗的程序員將會發(fā)現(xiàn) JDOM 非常容易掌握。 JDOM 處理 XML 的方式比 DOM 容易的多,并且它的功能比使用 SAX 更加強大。
JDOM 的內(nèi)部邏輯結(jié)構(gòu)基本上與 DOM 的相同,比如具有 Document 、 Element 、 Comment 等文檔節(jié)點類型,其中每一個 JDOM 文檔必須有一個 Document 節(jié)點,并且為節(jié)點樹的根節(jié)點。該根節(jié)點可以有子節(jié)點或者葉子節(jié)點如 Comment 、 Text 等。 JDOM 文檔中的每一個節(jié)點類型均對應(yīng)格式良好的 XML 文當(dāng)中的沒一個元素。這也就為我們利用 JDOM 轉(zhuǎn)換數(shù)據(jù)庫到 XML 文檔提供了可操作的依據(jù)。
JDOM 的優(yōu)點:
由 JDOM 的文檔聲明我們將會很明顯的看出應(yīng)用 JDOM 的優(yōu)勢所在。 JDOM 文檔聲明如下“ JDOM 引用了 20/80 原則,即使用 20% 的精力解決 80% 的 JAVA/XML 問題”。
● ?? JDOM 是用 JAVA 開發(fā)并為 JAVA 提供服務(wù)的,它沿用了 JAVA 代碼的規(guī)范和類庫;
● ?? 在眾多編程語言中, JAVA 是使用 XML 的優(yōu)秀平臺, XML 又是 JAVA 應(yīng)用的優(yōu)秀數(shù)據(jù)表示方法。 JDOM API 是純 JAVA API 對于 JAVA 開發(fā)人員來說更容易上手;
● ?? JDOM API 比 DOM 所提供的方法更為直觀,同時簡化了與 XML 的交互。比使用 DOM 更快。
org.jdom 是用于 JAVA API 操作的 JDOM 工具包。
在 org.jdom 中,提供了 Document 、 Element 、 Comment 、 DocType 、 Attribute 、 Text 等存 JAVA 類,這些類均是訪問和操作 JDOM 文檔所必須的。我們可以利用這些類創(chuàng)建、遍歷、修改 JDOM 文檔。
在 org.jdom.output 中,提供了 DOMOutputter 、 XMLOutputter ,用于處理 JDOM 樹的 DOM 樹形式、 XML 文檔形式輸出、打印等。
二、環(huán)境配置
在我的 WINDOWS2000 系統(tǒng)平臺上采用 TOMCAT4.1.18 、 JDK1.4.0_02 作為開發(fā)和測試平臺。
通過“我的電腦”的“高級”屬性添加如下兩個環(huán)境設(shè)置 CLASSPATH 設(shè)置為:“ .;c:\j2sdk1.4.0_02\lib\dt.jar;c:\j2sdk1.4.0_02\lib\tools.jar; ”。 PATH 設(shè)置為“ .;c:\j2sdk1.4.0_02\bin; ”。
SQL SERVER JDBC 驅(qū)動: mssqlserver.jar 放入 TOMCAT 的 LIB 目錄下。
三、獲得與安裝
JDOM
由于目前 JDOM 并沒有包含在 SUN 的 JDK 中(我想不久的將來 JDOM 必然會成為 SUN JDK 的一部分),我們必須手工下載與設(shè)置 JDOM 的環(huán)境。
在 http://www.jdom.org 可以下載 JDOM 的最新版本。這里下載的是 JDOM beta8 。下載 jdom-b8.zip 后解壓縮, JDOM 的 jar 文件就是 build 目錄下的文件 jdom.jar ,將上述文件拷貝到 J2SDK1.4.0_02 目錄下的 jre/lib/ext 目錄下。
四、利用
JDOM
實現(xiàn)
SQL SERVER
數(shù)據(jù)庫到
XML
的轉(zhuǎn)換
1 、數(shù)據(jù)庫、表的創(chuàng)建
這里應(yīng)用一個轉(zhuǎn)換顧客信息的例子——“顧客基本信息”。我們是把數(shù)據(jù)放置于 MICROSOFT SQL SERVER 2000 數(shù)據(jù)庫中,然后運用 JSP 和 JDOM 技術(shù)動態(tài)生成 XML 實例文檔。
我們事先 Microsoft SQL Server 數(shù)據(jù)庫 CUSTOM 中創(chuàng)建了一個數(shù)據(jù)表 --CUSTOM ,其數(shù)據(jù)結(jié)構(gòu)如下表所示:
字段名
|
注釋
|
類型
|
是否為空
|
Name |
姓名 |
varchar(12) |
NOT NULL |
ID |
ID |
int |
NOT NULL |
Company |
公司 |
varchar(30) |
NOT NULL |
Email |
TEL |
varchar(15) |
NOT NULL |
往數(shù)據(jù)庫中輸入以下幾條記錄:
Name
|
ID
|
Company
|
Email
|
劉氏 |
001 |
公司1 |
liu@yantai.com |
蔣氏 |
002 |
公司2 |
jiang@yantai.net |
2 、數(shù)據(jù)源設(shè)置
數(shù)據(jù)源( ODBC Source )實際上就是定義數(shù)據(jù)的來源。數(shù)據(jù)源的設(shè)置方法是: [ 開始 ]- 〉 [ 設(shè)置 ]- 〉 [ 控制面板 ]- 〉 [ 管理工具 ]- 〉 [ 數(shù)據(jù)源 (odbc)]- 〉 [System DSN]->[add]->[SQL Server] ,分別配置服務(wù)器名( CUSTOM 所在服務(wù)器)、數(shù)據(jù)庫名( CUSTOM )、數(shù)據(jù)源名稱(此處定為 DB_CUSTOM )、用戶名( lgz )、用戶口令(空),數(shù)據(jù)源就配置好了。
?
3 、代碼的編寫
下面開始我們的編寫 JSP 代碼轉(zhuǎn)換工作,代碼將通過調(diào)用 JDOM 動態(tài)生成 XML 結(jié)構(gòu),然后借助 JDBC 訪問 SQL SERVER 數(shù)據(jù)庫動態(tài)填充 XML 內(nèi)容。
<%@page contentType="text/html;charset=GBK"%>
<HTML>
<HEAD>
<TITLE>用JDOM實現(xiàn)數(shù)據(jù)庫到XML的轉(zhuǎn)換</TITLE>
</HEAD>
<BODY>
<%@page import="org.jdom.*"%>
<%@page import="java.*"%>
<%
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();??
String url="jdbc:microsoft:sqlserver://10.40.14.54:1433;DatabaseName=DB_CUSTOM";
//載入jdbc odbc的驅(qū)動程序
String user="lgz";
String password="lgz";
Connection conn= DriverManager.getConnection(url,user,password);?? //連接數(shù)據(jù)庫
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);??
//創(chuàng)建一個statement
String sql="select * from client";?? //定義查詢的SQL語句
ResultSet rs=stmt.executeQuery(sql);?? //執(zhí)行查詢
Document document=new Document(new Element("聯(lián)系人列表"));//創(chuàng)建文檔
ResultSetMetaData rsmd = rs.getMetaData();? //獲取字段名
int numberOfColumns = rsmd.getColumnCount(); //獲取字段數(shù)
?int i=0;
?while(rs.next()){ //將查詢結(jié)果取出???????????????????????
??? Element element0=new Element("聯(lián)系人");? //創(chuàng)建元素 生成JDOM樹
??? document.getRootElement().addContent(element0);
??? for (i=1; i<=numberOfColumns;i++)
?{?? String date=new String(rs.getString(i).getBytes("ISO-8859-1"),"gb2312"); //代碼轉(zhuǎn)換
??? Element element=new Element(rsmd.getColumnName(i)).setText(date);
element0.addContent(element);
?}??
? }
?rs.close();??????????????????????????? //關(guān)閉結(jié)果集
?stmt.close();?????????????????????????????? //關(guān)閉statement
conn.close();?????????????????????????? //關(guān)閉連接
XMLOutputter outp = new XMLOutputter();
outp.output(document, new FileOutputStream("d:\\data.xml")); //輸出XML文檔
out.print("XML 文檔生成完畢!");
%>
<a href="file:///d|/data.xml">點擊打開產(chǎn)生的XML文檔 </a>
</BODY>
</HTML> |
4 、程序的運行
通過瀏覽器的 8080 端口運行該 JSP ,將產(chǎn)生預(yù)期的 xml 文件。
五、應(yīng)用分析
XML 作為數(shù)據(jù)交換的標(biāo)準(zhǔn),得到了越來越廣泛的應(yīng)用。這篇文章闡明了數(shù)據(jù)庫到 XML 轉(zhuǎn)換的基本方法,從而使各異構(gòu)平臺以及各種格式的數(shù)據(jù)進行數(shù)據(jù)交換成為可能。當(dāng)我們能夠把原始的數(shù)據(jù)轉(zhuǎn)化為 XML 格式化的形式,就能夠以豐富的 HTML 的格式表示出來。這里列舉兩個方面的應(yīng)用:
1 、 ? XML 應(yīng)用服務(wù)器:
XML 應(yīng)用服務(wù)器實際上是支持 XML 的 Web 應(yīng)用服務(wù)器,它們通常是模板驅(qū)動的,通過在一個劇本語言中嵌入使用 SQL 語句來提取數(shù)據(jù)并動態(tài)構(gòu)建 XML 文檔。
2 、 基于 XML 的桌面應(yīng)用
我們知道通過 XSL 可以把相同的數(shù)據(jù)以不同的數(shù)據(jù)形式提交給終端客戶,一個 XSL 文件描述了數(shù)據(jù)的顯示方式,你可以把許多 XSL 和同一個 XML 文檔相連來提供不同的基于 HTML 的表示,這樣事實上,我們就可以建立基于 XML 的桌面應(yīng)用程序
采用這種方法主要有兩個優(yōu)點,首先,你可以以平臺和語言獨立的方式來操作數(shù)據(jù),其次,不需要編程你就可以實現(xiàn)對同樣數(shù)據(jù)的不同的視圖表示。