国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JSTL 入門:訪問SQL和XML內(nèi)容

2019-11-18 12:50:20
字體:
供稿:網(wǎng)友

  Web應(yīng)用程序的標(biāo)志是多個(gè)子系統(tǒng)的集成。SQL和xml是在這類子系統(tǒng)之間交換數(shù)據(jù)的兩種最通用的機(jī)制。在本文中,Mark Kolb介紹訪問jsp頁面數(shù)據(jù)庫和XML內(nèi)容的sql和xml庫并對JSTL進(jìn)行了總結(jié)。
  
  Web應(yīng)用程序的模板式(stereotypical)架構(gòu)分為三層:處理請求的Web服務(wù)器、實(shí)施業(yè)務(wù)邏輯的應(yīng)用程序服務(wù)器以及治理永久性數(shù)據(jù)的數(shù)據(jù)庫。應(yīng)用程序和數(shù)據(jù)庫層之間的聯(lián)接通常采用關(guān)系數(shù)據(jù)庫中的SQL調(diào)用格式。當(dāng)業(yè)務(wù)邏輯被寫入到java語言中時(shí),JDBC用于實(shí)現(xiàn)這些調(diào)用。
  
  假如應(yīng)用程序調(diào)用與其它服務(wù)器(本地或遠(yuǎn)程)的集成,我們將需要用于在不同子系統(tǒng)之間交換數(shù)據(jù)的更深層次的機(jī)制。在Web應(yīng)用程序內(nèi)部和應(yīng)用程序之間傳送數(shù)據(jù)采用的越來越普遍的一種方法是XML文件的交換。
  
  迄今為止,在我們的JSTL之旅中,我們討論了JSTL 表達(dá)式語言(eXPRession language,EL)和core和fmt標(biāo)記庫。在最后一部分,我們將考慮sql和xml庫--正如它們的名字表示的一樣 -- 提供定制標(biāo)記來接入和治理從SQL數(shù)據(jù)庫和XML文件檢索到的數(shù)據(jù)。
  
  xml庫
  根據(jù)設(shè)計(jì),XML提供靈活的方式來表示結(jié)構(gòu)化數(shù)據(jù),這些數(shù)據(jù)同時(shí)預(yù)備進(jìn)行驗(yàn)證,因此它尤其適應(yīng)于在松散聯(lián)合的系統(tǒng)之間交換數(shù)據(jù)。這反過來使其成為Web應(yīng)用程序極具吸引力的集成技術(shù)。
  
  與使用XML表示的數(shù)據(jù)進(jìn)行交互的第一步是把數(shù)據(jù)作為一個(gè)XML文件,對其進(jìn)行檢索并進(jìn)行分解,以創(chuàng)建數(shù)據(jù)結(jié)構(gòu)來接入該文件中的內(nèi)容。在分解文件后,您可以有選擇的對其進(jìn)行轉(zhuǎn)換以創(chuàng)建新的XML文件,您可以對新的XML文件進(jìn)行相同的操作。最終,文件中的數(shù)據(jù)可以被提取,然后顯示或使用作為輸入數(shù)據(jù)來運(yùn)行其它操作。
  
  這些步驟都在用于控制XML的JSTL標(biāo)記中反映出。根據(jù)我們在第2部分探討核心中所討論的,我們使用core庫中的<c:import>標(biāo)記來檢索XML文件。然后使用<x:parse>標(biāo)記來分解該文件,支持標(biāo)準(zhǔn)的XML分解技術(shù),如文件對象模式(Document Object Model,DOM)和簡單XML API(Simple API for XML,SAX)。<x:transform>標(biāo)記可用于轉(zhuǎn)換XML文件并依靠標(biāo)準(zhǔn)技術(shù)來轉(zhuǎn)換XML數(shù)據(jù):擴(kuò)展樣式表語言(Extensible Stylesheet Language,XSL)。最后,我們提供多個(gè)標(biāo)記來接入和控制分解后的XML數(shù)據(jù),但是所有這一切都依靠于另一種標(biāo)準(zhǔn)-XML路徑語言(XML Path Language,XPath),以引用分解后的XML文件中的內(nèi)容。
  
  分解XML
  <x:parse>標(biāo)記有多種格式,取決于用戶希望的分解類型。這一項(xiàng)操作最基本的格式使用以下語法:
  
  <x:parse xml="expression" var="name" scope="scope"
  filter="expression" systemId="expression"/>
  
  在這五種屬性中,只有xml屬性是需要的,其值應(yīng)該是包含要分解的XML文件的字符串,或者是java.io.Reader實(shí)例,通過它可以讀取要被分解的文件。此外,您可以使用以下語法,根據(jù)<x:parse>標(biāo)記的主體內(nèi)容來規(guī)定要被分解的文件:
  
  <x:parse var="name" scope="scope"
  filter="expression" systemId="expression">
   body content
  </x:parse>
  
  var和scope屬性規(guī)定存儲(chǔ)分解后的文件的scoped變量。然后xml庫中的其它標(biāo)記可以使用這一變量來運(yùn)行其它操作。注重,當(dāng)var和 scope 屬性存在時(shí),JSTL用于表示分解后的文件的數(shù)據(jù)結(jié)構(gòu)類型以實(shí)施為導(dǎo)向,從而廠商可以對其進(jìn)行優(yōu)化。
  
  假如應(yīng)用程序需要對JSTL提供的分解后的文件進(jìn)行處理,它可以使用另一種格式的<x:parse>,它要求分解后的文件堅(jiān)持使用一個(gè)標(biāo)準(zhǔn)接口。在這種情況下,該標(biāo)記的語法如下:
  
  <x:parse xml="expression" varDom="name" scopeDom="scope"
  filter="expression" systemId="expression"/>
  
  當(dāng)您使用<x:parse>的這一版本時(shí),表示分解后的XML文件的對象必須使用org.w3c.dom.Document接口。當(dāng)根據(jù)<x:parse>中的主體內(nèi)容來規(guī)定XML文件時(shí),您還可以使用varDom和scopeDom屬性來代替var 和 scope屬性,語法如下:
  
  <x:parse varDom="name" scopeDom="scope"
  filter="expression" systemId="expression">
   body content
  </x:parse>
  
  其它兩個(gè)屬性filter 和 systemId 可以實(shí)現(xiàn)對分解流程的精確控制。filter 屬性規(guī)定org.xml.sax.XMLFilter類的一個(gè)實(shí)例,以在分解之前對文件進(jìn)行過濾。假如要被分解的文件非常大,但目前的工作只需要處理一小部分內(nèi)容時(shí)這一屬性尤其有用。systemId屬性表示要被分解的文件的URI并解析文件中出現(xiàn)的任何相關(guān)的路徑。當(dāng)被分解的XML文件使用相關(guān)的URL來引用分解流程中需要接入的其它文件或資源時(shí)需要這種屬性
  
  清單1展示了<x:parse> 標(biāo)記的使用,包括與 <c:import>的交互。此處<c:import> 標(biāo)記用于檢索眾所周知的Slashdot Web 網(wǎng)站的RDF Site Summary (RSS)反饋,然后使用<x:parse>分解表示rss 反饋的XML文件,表示分解后的文件的以實(shí)施為導(dǎo)向的數(shù)據(jù)結(jié)構(gòu)被保存到名為rss的變量(帶有page 范圍)中。
  
  清單1:<x:parse>與<c:import>的交互
  
  <c:import var="rssFeed" url="http://slashdot.org/slashdot.rdf"/>
  <x:parse var="rss" xml="${rssFeed}"/>
  
  轉(zhuǎn)換XML
  XML通過XSL樣式表來轉(zhuǎn)換。JSTL使用<x:transform>標(biāo)記來支持這一操作。與<x:parse>的情況一樣,<x:transform> 標(biāo)記支持多種不同的格式。<x:transform> 最基本的格式的語法是:
  
  <x:transform xml="expression" xslt="expression"
  var="name" scope="scope"
  xmlSystemId="expression" xsltSystemId="expression">
   <x:param name="expression" value="expression"/>
   ...
  </x:transform>
  
  此處,xml 屬性規(guī)定要被轉(zhuǎn)換的文件,xslt 屬性規(guī)定定義這次轉(zhuǎn)換的樣式表。這兩種屬性是必要的,其它屬性為可選。
  
  與<x:parse>的xml屬性一樣,<x:transform>的xml 屬性值可以是包含XML文件的字符串,或者是接入這類文件的Reader。此外,它還可以采用 org.w3c.dom.Document 類或javax.xml.transform.Source 類的實(shí)例格式。最后,它還可以是使用<x:parse> 操作的var或varDom屬性分配的變量值。
  
  而且,您可以根據(jù)<x:transform> 操作的主體內(nèi)容來包含要被轉(zhuǎn)換的XML文件。在這種情況下,<x:transform> 的語法是:
  
  <x:transform xslt="expression"
  var="name" scope="scope"
  xmlSystemId="expression" xsltSystemId="expression">
   body content
   <x:param name="expression" value="expression"/>
   ...
  </x:transform>
  
  在這兩種情況下,規(guī)定XSL 樣式表的xslt 屬性應(yīng)是字符串、Reader或javax.xml.transform.Source實(shí)例。
  
  假如var 屬性存在,轉(zhuǎn)換后的XML文件將分配給相應(yīng)的scoped變量,作為org.w3c.dom.Document 類的一個(gè)實(shí)例。通常,scope屬性規(guī)定這類變量分配的范圍。
  
  <x:transform> 標(biāo)記還支持將轉(zhuǎn)換結(jié)果存儲(chǔ)到j(luò)avax.xml.transform.Result 類的一個(gè)實(shí)例中,而不是作為org.w3c.dom.Document的一個(gè)實(shí)例。假如var 和 scope 屬性被省略,result對象規(guī)定作為result屬性的值,<x:transform>標(biāo)記將使用該對象來保存應(yīng)用該樣式表的結(jié)果。清單2中介紹了使用<x:transform> 的result屬性的這兩種語法的變化:
  
  清單2:使用result屬性來提供javax.xml.transform.Result實(shí)例時(shí),<x:transform>操作的語法變化
  
  <x:transform xml="expression" xslt="expression"
  result="expression"
  xmlSystemId="expression" xsltSystemId="expression">
   <x:param name="expression" value="expression"/>
   ...
  </x:transform>
  
  <x:transform xslt="expression"
  result="expression"
  xmlSystemId="expression" xsltSystemId="expression">
   body content
   <x:param name="expression" value="expression"/>
   ...
  </x:transform>
  
  無論您采用這兩種<x:transform>格式中的那一種,您都必須從定制標(biāo)記單獨(dú)創(chuàng)建javax.xml.transform.Result對象。該對象自身作為result屬性的值提供。
  
  假如既不存在var 屬性,也不存在result屬性,轉(zhuǎn)換的結(jié)果將簡單地插入到JSP頁面,作為處理<x:transform> 操作的結(jié)果。當(dāng)樣式表用于將數(shù)據(jù)從XML轉(zhuǎn)換成Html時(shí)尤其有用,如清單3所示:
  
  清單3:在JSP頁面直接顯示轉(zhuǎn)換的XML數(shù)據(jù)
  
  <c:import var="rssFeed" url="http://slashdot.org/slashdot.rdf"/>
  <c:import var="rssToHtml" url="/WEB-INF/xslt/rss2html.xsl"/>
  <x:transform xml="${rssFeed}" xslt="${rssToHtml}"/>
  
  在本例中,使用 <c:import> 標(biāo)記來讀取RSS反饋和適當(dāng)?shù)臉邮奖怼邮奖淼妮敵鼋Y(jié)果是HTML,通過忽略<x:transform>的var和result 屬性來直接顯示。圖1顯示了實(shí)例結(jié)果:
  
  
圖1:清單3的輸出結(jié)果

  
 JSTL 入門:訪問SQL和XML內(nèi)容

  與<x:parse>的systemId 屬性一樣,<x:transform>的xmlSystemId 和 xsltSystemId 屬性用于解析XML文件中相關(guān)的路徑。在這種情況下,xmlSystemId 屬性應(yīng)用于根據(jù)標(biāo)記的 xml屬性值提供的文件,而xsltSystemId 屬性用于解析根

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南宫市| 达孜县| 苍溪县| 沁水县| 祁阳县| 都安| 西贡区| 甘孜县| 阜新市| 浦城县| 翁源县| 望奎县| 通河县| 邵阳市| 横峰县| 绥宁县| 新营市| 大姚县| 碌曲县| 郓城县| 安平县| 台前县| 慈溪市| 镇康县| 和政县| 永善县| 陈巴尔虎旗| 额济纳旗| 苍梧县| 甘德县| 上林县| 郸城县| 陆丰市| 二连浩特市| 禹城市| 伊吾县| 贵南县| 平塘县| 银川市| 石阡县| 江孜县|