《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動態(tài) > XSLT技術(shù)在JavaWeb開發(fā)中的應(yīng)用

XSLT技術(shù)在JavaWeb開發(fā)中的應(yīng)用

2009-03-05
作者:易小華

引 言
隨著Web2.0的提出,web開發(fā)將成為未來軟件發(fā)展的主導(dǎo),各行各業(yè)都離不開網(wǎng)絡(luò),,因此軟件開發(fā)人員也一直在探討一種好的開發(fā)框架模型,使得開發(fā)的軟件在給用戶最好的體驗,,最大限度地滿足客戶需的同時,也給開發(fā)人員最大的便利和好的分工。本文從一個側(cè)面分析了XSLT技術(shù)在JavaWeb開發(fā)中的應(yīng)用,,這種探討是符合軟件開發(fā)目的的可行的方案,。
1 技術(shù)背景
Servlet是開發(fā)服務(wù)器端應(yīng)用程序的一種強(qiáng)大的語言,它使用Java語言編寫,,提供了對整個JAVA API的完全訪問,,而且具有一個完備的Servlet API來處理HTTP請求,使用java語言編寫使他與其他相關(guān)技術(shù)相比具有易于編寫,,簡單,,平臺無關(guān),可擴(kuò)展性強(qiáng),,好維護(hù),,安全,面向?qū)ο蟮葍?yōu)點(diǎn),,給程序員在使用最先進(jìn)的技術(shù)上帶來了極大的便利性,,另外他只需裝載一次從而速度較快。但是由于它在數(shù)據(jù)處理結(jié)果顯示也就是界面設(shè)計方面的天生不足,,使他在當(dāng)今強(qiáng)調(diào)分工的社會得不到很好普及,,因為編寫服務(wù)器端代碼的人一般是軟件開發(fā)人員,用Servlet使得他們不僅要編寫業(yè)務(wù)邏輯,,還要考慮怎么設(shè)計界面,,而這些只是美工的專長,顯然不利于分工,,很容易分散程序員的精力,。那么怎樣來解決這個問題呢方法有很多譬如:JSP技術(shù),XML技術(shù),。
使用XML技術(shù)很好的解決了這個問題不失為一種上上之策。XML是一種可擴(kuò)展標(biāo)記語言它在描述結(jié)構(gòu)型數(shù)據(jù)信息,,并對他進(jìn)行有效性驗證,,以及轉(zhuǎn)化處理和顯示上有自己得天獨(dú)厚的優(yōu)勢,因為使用Schema可以很好的描述現(xiàn)實(shí)世界中業(yè)務(wù)數(shù)據(jù)的規(guī)則,,使用DOM技術(shù)將XML文檔抽象成一棵節(jié)點(diǎn)樹進(jìn)行數(shù)據(jù)處理非常便利和靈活,,使用Xpath和XSLT語言又可以實(shí)現(xiàn)數(shù)據(jù)的靈活顯示,實(shí)現(xiàn)與用戶交互的界面設(shè)計的靈活性也就是按需取值,。另外使用自定義標(biāo)記是文檔具有很好的可讀性,。這兩者各自的優(yōu)點(diǎn)便利性和強(qiáng)大的功能正好實(shí)現(xiàn)了優(yōu)勢互補(bǔ),非常適合Web開發(fā)中的分工和配合,,另外現(xiàn)在隨著JAVA和XML這兩大語言的流行,,也正說明了他們的融和將是一種必然的趨勢。
具體實(shí)現(xiàn)的探討
.
可行的模型:
下面是Servlet和XML結(jié)合應(yīng)用的一種可行的MVC模型:??

??????

????????

????????

下面通過一個實(shí)例來解釋這個模型:
實(shí)例從表Paper中取出數(shù)據(jù),再生成XMl文檔,,再通過XSLT顯示,。
(用戶請求Display.java,Display.java通過ConnectionPool.java和 CommonTable.java從數(shù)據(jù)庫Paper中提取數(shù)據(jù)并在XMLFile.java提供的接口下動態(tài)生成XML文檔Display.xml,最后通過XSLT文檔Display.xsl將XML文檔轉(zhuǎn)換成html頁面提供給用戶).
1. 數(shù)據(jù)庫連接與操作:ConnectionPool.java(負(fù)責(zé)建立數(shù)據(jù)庫連接)使用連接池實(shí)現(xiàn),。CommonTable.java(代碼略)它用于對數(shù)據(jù)庫進(jìn)行各種操作,。
2.?XML文檔的處理:XMLFile.java這是實(shí)現(xiàn)Sevlet與XML連接的關(guān)鍵,代碼略:
3.?XML文檔(Display.xml)和XSLT轉(zhuǎn)換(Display.xsl):(代碼略)
4.?使用Servlet生成XML文檔:Display.java
.Display.java
import common.XFile.*;?//??引進(jìn)XMLFile.class
import common.database.*;?//?引入數(shù)據(jù)庫操作包
import javax.servlet.*;?//?引入Servlet包
import javax.servlet.http.*;
import java.io.*;?//?文件操作
import java.util.*;
public class Display extends HttpServlet {?//?該實(shí)例對象可以實(shí)現(xiàn)對已有XML靜
? private XMLFile file;?//?態(tài)文檔中插入動態(tài)內(nèi)容(替換標(biāo)記),,并對一些字符進(jìn)行替
? public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {?//?換以方便插入數(shù)據(jù)庫,。
??????? response.setContentType("text/xml");?//?設(shè)置為XML類型
??????? PrintWriter out = new PrintWriter (response.getOutputStream());
??????? file=new XMLFile("xml\\Display.xml");?//?引入實(shí)例文檔
??????? CommonTable table1=new CommonTable("Paper");?//?建立對Paper的數(shù)據(jù)庫炒
??????? //?作對象,獲取Title,data,,author,,記錄數(shù)等數(shù)據(jù)
??????? Vector title=table1.selectCol("Title","PaperID");
??????? Vector date=table1.selectCol("SubmitTime", "PaperID");
??????? Vector author=table1.selectCol("author", "PaperID");
??????? int number=table1.count ("PaperID", "");
??????? String replace="";
??????? int i;
//??根據(jù)提取的數(shù)據(jù)生成動態(tài)XML數(shù)據(jù)
??????????? for(i=number-1; i>=0; i--)
??????????? {
??????????????? Vector num=table1.find("PaperID","Title='"+title.elementAt(i).toString()+"'","",1,1,100);
??????????????? String t=num.get(0).toString();
???? ???? long tmLong=Long.parseLong(date.elementAt(i).toString());
???? ???? Date currentDate=new Date(tmLong);
??????????????? replace+=""+title.elementAt(i).toString ()+""+
????? ???? ""+author.elementAt(i).toString()+""+
??? ?????? ""+(currentDate.getYear()+1900)+"."+(currentDate.getMonth()+1)+"."+(currentDate.getDate())+""+
??????????????????? "visit.html?ID="+t+""+
??????????? ??"
";
???????????? }
//?對一些特殊字符進(jìn)行替換,以方便插入數(shù)據(jù)庫
??????? file.replaceAll("<%replace%>",replace);
??????? file.replaceAll("<%replace1%>",replace1);
??????? file.replaceAll("^","'");
??????? out.println(file.getContent());
??????? out.close();
??? }
}
下面可以對JSP和XML對界面設(shè)計的應(yīng)用可以做一個比較:
.JSP:
1.? JSP構(gòu)造頁面太痛苦. 代碼嵌入頁面導(dǎo)致頁面臃腫, 邏輯復(fù)雜, 不易編輯.
2. 程序員和美工的接口必須精確定義. 復(fù)雜的嵌套輸出必須構(gòu)造復(fù)雜的顯示類作為接口.
3. 調(diào)試JSP必須等到前端程序結(jié)束才能看到效果.
4. 調(diào)試JSP效率極低, 一點(diǎn)點(diǎn)小的修改都會引起jsp的重新編譯.
.XSLT:
1.JDK1.4已經(jīng)自帶XML API和XSLT, 并且支持XSLT 1.0標(biāo)準(zhǔn). IE6也支持同樣標(biāo)準(zhǔn).
2. 開發(fā)前先制作接口用的demo XML, 程序員的輸出必須符合此格式. 美工根據(jù)此格式制作XSL. 接口可視化, 明確定義.
3. 只要定義好接口XML, 兩邊幾乎不需要再聯(lián)合調(diào)試. 美工利用接口XML和IE6就可以直接看到效果.
4. 程序員只要保證輸出的XML的是否符合接口, 直觀的做文字性對比.
5. 大量頁面可重用的部分能方便的抽象出來, 在XSL文件中include/import進(jìn)來. 高度重用, 標(biāo)準(zhǔn)化.
6. 寫XSL可大量采用template, 結(jié)構(gòu)清晰, 修改方便, 寫頁面變成搭積木, 不再有jsp的層層嵌套.
7. 對于不同的終端設(shè)備, 可以定制不同的XSL, 很方便的就能夠支持手機(jī), pda...
8. 在程序中利用支持XML的工具, 比如Mysql, 可以直接生成XML結(jié)果, 無需復(fù)雜編程
9.實(shí)現(xiàn)美工與程序員的很好的分工,,使開發(fā)更加簡單,。
總? 結(jié)
總之,隨著互聯(lián)網(wǎng)的日趨成熟,,和XML,,JAVA語言的日益流行JAVA和XML技術(shù)結(jié)合帶來的好處將呈現(xiàn)在大家眼前。
附注:
參考文獻(xiàn):

1.?《JavaSevlet編程》Jason Hunter,William Crawford 中國電力出版社 2002年6月
2.?《XML技術(shù)及其使用》沈裕和? 北京信息工程學(xué)院內(nèi)部教材? 2005
3.?《java核心技術(shù)》卷Ⅱ Cay S.Horstmann 機(jī)械工業(yè)出版社 2003.1
4.?《XML技術(shù)內(nèi)幕》? Natanya Pitts? 機(jī)械工業(yè)出版社 2002年1月

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。