引 言
隨著Web2.0的提出,web開發將成為未來軟件發展的主導,各行各業都離不開網絡,因此軟件開發人員也一直在探討一種好的開發框架模型,使得開發的軟件在給用戶最好的體驗,最大限度地滿足客戶需的同時,也給開發人員最大的便利和好的分工。本文從一個側面分析了XSLT技術在JavaWeb開發中的應用,這種探討是符合軟件開發目的的可行的方案。
1 技術背景
Servlet是開發服務器端應用程序的一種強大的語言,它使用Java語言編寫,提供了對整個JAVA API的完全訪問,而且具有一個完備的Servlet API來處理HTTP請求,使用java語言編寫使他與其他相關技術相比具有易于編寫,簡單,平臺無關,可擴展性強,好維護,安全,面向對象等優點,給程序員在使用最先進的技術上帶來了極大的便利性,另外他只需裝載一次從而速度較快。但是由于它在數據處理結果顯示也就是界面設計方面的天生不足,使他在當今強調分工的社會得不到很好普及,因為編寫服務器端代碼的人一般是軟件開發人員,用Servlet使得他們不僅要編寫業務邏輯,還要考慮怎么設計界面,而這些只是美工的專長,顯然不利于分工,很容易分散程序員的精力。那么怎樣來解決這個問題呢方法有很多譬如:JSP技術,XML技術。
使用XML技術很好的解決了這個問題不失為一種上上之策。XML是一種可擴展標記語言它在描述結構型數據信息,并對他進行有效性驗證,以及轉化處理和顯示上有自己得天獨厚的優勢,因為使用Schema可以很好的描述現實世界中業務數據的規則,使用DOM技術將XML文檔抽象成一棵節點樹進行數據處理非常便利和靈活,使用Xpath和XSLT語言又可以實現數據的靈活顯示,實現與用戶交互的界面設計的靈活性也就是按需取值。另外使用自定義標記是文檔具有很好的可讀性。這兩者各自的優點便利性和強大的功能正好實現了優勢互補,非常適合Web開發中的分工和配合,另外現在隨著JAVA和XML這兩大語言的流行,也正說明了他們的融和將是一種必然的趨勢。
具體實現的探討
.可行的模型:
下面是Servlet和XML結合應用的一種可行的MVC模型:??
??????
????????
????????
下面通過一個實例來解釋這個模型:
實例從表Paper中取出數據,再生成XMl文檔,再通過XSLT顯示。
(用戶請求Display.java,Display.java通過ConnectionPool.java和 CommonTable.java從數據庫Paper中提取數據并在XMLFile.java提供的接口下動態生成XML文檔Display.xml,最后通過XSLT文檔Display.xsl將XML文檔轉換成html頁面提供給用戶).
1. 數據庫連接與操作:ConnectionPool.java(負責建立數據庫連接)使用連接池實現。CommonTable.java(代碼略)它用于對數據庫進行各種操作。
2.?XML文檔的處理:XMLFile.java這是實現Sevlet與XML連接的關鍵,代碼略:
3.?XML文檔(Display.xml)和XSLT轉換(Display.xsl):(代碼略)
4.?使用Servlet生成XML文檔:Display.java
.Display.java
import common.XFile.*;?//??引進XMLFile.class
import common.database.*;?//?引入數據庫操作包
import javax.servlet.*;?//?引入Servlet包
import javax.servlet.http.*;
import java.io.*;?//?文件操作
import java.util.*;
public class Display extends HttpServlet {?//?該實例對象可以實現對已有XML靜
? private XMLFile file;?//?態文檔中插入動態內容(替換標記),并對一些字符進行替
? public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {?//?換以方便插入數據庫。
??????? response.setContentType("text/xml");?//?設置為XML類型
??????? PrintWriter out = new PrintWriter (response.getOutputStream());
??????? file=new XMLFile("xml\\Display.xml");?//?引入實例文檔
??????? CommonTable table1=new CommonTable("Paper");?//?建立對Paper的數據庫炒
??????? //?作對象,獲取Title,data,author,記錄數等數據
??????? 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;
//??根據提取的數據生成動態XML數據
??????????? 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+="
????? ???? "
??? ?????? "
??????????????????? "
??????????? ??"
???????????? }
//?對一些特殊字符進行替換,以方便插入數據庫
??????? file.replaceAll("<%replace%>",replace);
??????? file.replaceAll("<%replace1%>",replace1);
??????? file.replaceAll("^","'");
??????? out.println(file.getContent());
??????? out.close();
??? }
}
下面可以對JSP和XML對界面設計的應用可以做一個比較:
.JSP:
1.? JSP構造頁面太痛苦. 代碼嵌入頁面導致頁面臃腫, 邏輯復雜, 不易編輯.
2. 程序員和美工的接口必須精確定義. 復雜的嵌套輸出必須構造復雜的顯示類作為接口.
3. 調試JSP必須等到前端程序結束才能看到效果.
4. 調試JSP效率極低, 一點點小的修改都會引起jsp的重新編譯.
.XSLT:
1.JDK1.4已經自帶XML API和XSLT, 并且支持XSLT 1.0標準. IE6也支持同樣標準.
2. 開發前先制作接口用的demo XML, 程序員的輸出必須符合此格式. 美工根據此格式制作XSL. 接口可視化, 明確定義.
3. 只要定義好接口XML, 兩邊幾乎不需要再聯合調試. 美工利用接口XML和IE6就可以直接看到效果.
4. 程序員只要保證輸出的XML的是否符合接口, 直觀的做文字性對比.
5. 大量頁面可重用的部分能方便的抽象出來, 在XSL文件中include/import進來. 高度重用, 標準化.
6. 寫XSL可大量采用template, 結構清晰, 修改方便, 寫頁面變成搭積木, 不再有jsp的層層嵌套.
7. 對于不同的終端設備, 可以定制不同的XSL, 很方便的就能夠支持手機, pda...
8. 在程序中利用支持XML的工具, 比如Mysql, 可以直接生成XML結果, 無需復雜編程
9.實現美工與程序員的很好的分工,使開發更加簡單。
總? 結
總之,隨著互聯網的日趨成熟,和XML,JAVA語言的日益流行JAVA和XML技術結合帶來的好處將呈現在大家眼前。
附注:
參考文獻:
1.?《JavaSevlet編程》Jason Hunter,William Crawford 中國電力出版社 2002年6月
2.?《XML技術及其使用》沈裕和? 北京信息工程學院內部教材? 2005
3.?《java核心技術》卷Ⅱ Cay S.Horstmann 機械工業出版社 2003.1
4.?《XML技術內幕》? Natanya Pitts? 機械工業出版社 2002年1月