XML在B/S架構(gòu)開(kāi)發(fā)中的應(yīng)用
發(fā)表時(shí)間:2024-02-08 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]傳統(tǒng)上, 我們利用JSP+Bean來(lái)開(kāi)發(fā)用戶界面, 這里介紹一種利用XML+XSLT的方法來(lái)替代JSP 動(dòng)機(jī): 1. JSP構(gòu)造頁(yè)面太痛苦. 代碼嵌入頁(yè)面導(dǎo)致頁(yè)面臃腫, 邏輯復(fù)雜, 不易編輯. 2. 程序員和美工的接口必須精確定義. 復(fù)雜的嵌套輸出必須構(gòu)造復(fù)雜的顯示類作為接口. 3. 調(diào)試...
傳統(tǒng)上, 我們利用JSP+Bean來(lái)開(kāi)發(fā)用戶界面, 這里介紹一種利用XML+XSLT的方法來(lái)替代JSP
動(dòng)機(jī):
1. JSP構(gòu)造頁(yè)面太痛苦. 代碼嵌入頁(yè)面導(dǎo)致頁(yè)面臃腫, 邏輯復(fù)雜, 不易編輯.
2. 程序員和美工的接口必須精確定義. 復(fù)雜的嵌套輸出必須構(gòu)造復(fù)雜的顯示類作為接口.
3. 調(diào)試JSP必須等到前端程序結(jié)束才能看到效果.
4. 調(diào)試JSP效率極低, 一點(diǎn)點(diǎn)小的修改都會(huì)引起jsp的重新編譯. 新的XML的解決方案:
1. 一個(gè)servlet做統(tǒng)一管理. 接受url請(qǐng)求, 映射到對(duì)應(yīng)的程序bean.
2. 程序bean只產(chǎn)生XML, 由servlet統(tǒng)一用對(duì)應(yīng)的XSL轉(zhuǎn)換為html.
好處:
1. JDK1.4已經(jīng)自帶XML API和XSLT, 并且支持XSLT 1.0標(biāo)準(zhǔn). IE6也支持同樣標(biāo)準(zhǔn).
2. 開(kāi)發(fā)前先制作接口用的demo XML, 程序員的輸出必須符合此格式. 美工根據(jù)此格式制作XSL. 接口可視化, 明確定義.
3. 只要定義好接口XML, 兩邊幾乎不需要再聯(lián)合調(diào)試. 美工利用接口XML和IE6就可以直接看到效果.
4. 程序員只要保證輸出的XML的是否符合接口, 直觀的做文字性對(duì)比.
5. 大量頁(yè)面可重用的部分能方便的抽象出來(lái), 在XSL文件中include/import進(jìn)來(lái). 高度重用, 標(biāo)準(zhǔn)化.
6. 寫XSL可大量采用template, 結(jié)構(gòu)清晰, 修改方便, 寫頁(yè)面變成搭積木, 不再有jsp的層層嵌套.
7. 對(duì)于不同的終端設(shè)備, 可以定制不同的XSL, 很方便的就能夠支持手機(jī), pda...
8. 在程序中利用支持XML的工具, 比如sql2000, 可以直接生成XML結(jié)果, 無(wú)需復(fù)雜編程.
壞處:
1. 因?yàn)橐M(jìn)行XSLT轉(zhuǎn)換, 服務(wù)器工作量稍微增大.
以下是幾個(gè)關(guān)鍵環(huán)節(jié)的簡(jiǎn)單示例:
==============servlet中的XML轉(zhuǎn)換========== /** * XML是String * XSL從文件中讀取 * 直接寫入response */ //import javax.xml.transform.*; //import javax.xml.transform.stream.*; StreamSource xml = new StreamSource(new StringReader(xmlSource)); StreamSource xsl = new StreamSource(xslFileName); response.setContentType("text/html; charset=UTF-8"); StreamResult result = new StreamResult(response.getWriter()); Transformer trans = TransformerFactory.newInstance().newTransformer(xsl); trans.setOutputProperty("encoding","UTF-8"); trans.transform(xml, result); ==================接口XML文件樣本============= <?xml version="1.0" encoding="UTF-8"?> <?xml:stylesheet type="text/xsl" href="xxx.xsl"?> <PAGE> <OUTPUT> <INFO>推廣UNICODE, 解決多語(yǔ)言問(wèn)題.</INFO> </OUTPUT> </PAGE> ==================XSL文件樣本============= <?xml version="1.0" encoding="UTF-8"?> <?xml:namespace prefix = xsl /><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/">
<P align=center> <xsl:value-of select="page/output/info"></xsl:value-of>
</xsl:template> </xsl:stylesheet> |
考慮:
1. 可以把XSLT轉(zhuǎn)換放在IE進(jìn)行, IE6以下版本要安裝MSXML3, 對(duì)客戶端限制太多.
2. 在客戶端的XSLT轉(zhuǎn)換必須完全讀入XML+XSL, 在網(wǎng)速不高或者內(nèi)容很多的時(shí)候反應(yīng)相當(dāng)遲鈍.
3. 手機(jī), pda等設(shè)備不能進(jìn)行XSLT轉(zhuǎn)換, 所以XSLT轉(zhuǎn)換還是放在服務(wù)器上比較合適.
4. 因?yàn)橐话闾峤粌?nèi)容都比較簡(jiǎn)單, 所以沒(méi)有采用XML處理, 在程序中也盡量少用XML, 避免影響速度.
5. 可以在servlet判斷特定參數(shù), 比如發(fā)現(xiàn)有xml-view參數(shù)時(shí), 不做XSLT轉(zhuǎn)換, 直接輸出XML到瀏覽器, 供程序調(diào)試用.
說(shuō)明:
1. 這里只是利用XSLT的功能來(lái)解決網(wǎng)站建設(shè)中最頭痛的界面和邏輯分開(kāi)問(wèn)題, 不是基于XML的內(nèi)容處理.
2. 如果你想趕時(shí)髦, 用XML來(lái)全副武裝, 可以參考cocoon2, http://xml.apache.org/cocoon/. 但是請(qǐng)記住, cocoon
還不完善, 你將碰到亂碼, 速度, 文檔不足的問(wèn)題, 但是它的思想的確值得學(xué)習(xí).
3. 在tomcat, resin中有用filter實(shí)現(xiàn)的xslt轉(zhuǎn)換,可參考。