亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JSTL 入門:訪問SQL和XML內容

2019-11-18 12:50:20
字體:
來源:轉載
供稿:網友

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

  
 JSTL 入門:訪問SQL和XML內容

  與<x:parse>的systemId 屬性一樣,<x:transform>的xmlSystemId 和 xsltSystemId 屬性用于解析XML文件中相關的路徑。在這種情況下,xmlSystemId 屬性應用于根據標記的 xml屬性值提供的文件,而xsltSystemId 屬性用于解析根

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩成人在线播放| 北条麻妃一区二区在线观看| 久久久99久久精品女同性| 一区二区三区黄色| 欧美精品情趣视频| 亚洲欧美综合精品久久成人| 久久国产精品久久国产精品| 国产一区二区三区视频免费| 欧美一级bbbbb性bbbb喷潮片| 欧美在线中文字幕| 成人黄色免费在线观看| 亚洲开心激情网| 国内伊人久久久久久网站视频| 亚洲精品久久视频| 成人伊人精品色xxxx视频| 日韩电视剧在线观看免费网站| 91久久国产精品91久久性色| 日韩视频免费在线观看| 亚洲欧美另类中文字幕| 中文字幕在线成人| 久久久久久久久久久av| 国产一区二区香蕉| 美乳少妇欧美精品| 国语自产偷拍精品视频偷| 亚洲精品一区二区三区婷婷月| 国产精品久久久久久久一区探花| 亚洲国产欧美久久| 亚洲伦理中文字幕| 久久精品这里热有精品| 久久久精品999| 66m—66摸成人免费视频| 精品久久中文字幕久久av| 国产日韩在线免费| 日韩av中文字幕在线免费观看| 欧美亚洲激情视频| 国产激情久久久久| 久久九九免费视频| 在线看片第一页欧美| 欧美麻豆久久久久久中文| 国内精品久久久久久中文字幕| 成人午夜小视频| 中文综合在线观看| 91高潮精品免费porn| 国产在线视频一区| 亚洲综合成人婷婷小说| 一本色道久久88亚洲综合88| 亚洲午夜未删减在线观看| 欧洲精品在线视频| 欧洲日韩成人av| 美女久久久久久久久久久| 九九热精品视频| 成人中文字幕+乱码+中文字幕| 亚洲精品国产电影| 精品成人在线视频| 日韩高清有码在线| 国内揄拍国内精品少妇国语| 亚洲一区免费网站| 日韩高清有码在线| 亚洲免费av网址| 亚洲成av人影院在线观看| 久久久久久久激情视频| 中文字幕一区电影| 亚洲成色777777在线观看影院| 欧美国产第二页| 欧美日韩国内自拍| 欧美在线观看视频| 国产成+人+综合+亚洲欧美丁香花| 国产91成人在在线播放| 欧美日韩aaaa| 欧美中文在线观看| 亚洲一级黄色片| 国产精品女主播| 91久久精品久久国产性色也91| 国产精品视频999| 国产成人精品综合| 欧美大秀在线观看| 久久综合五月天| 亚洲欧洲国产精品| 日韩黄色在线免费观看| 午夜精品久久久久久久99热浪潮| 亚洲bt天天射| 欧美一区二区三区图| 国产精品国产自产拍高清av水多| 国产精品第七十二页| 日韩日本欧美亚洲| 中文欧美日本在线资源| 久久精品国产成人精品| 自拍亚洲一区欧美另类| 亚洲色图日韩av| 欧美亚洲成人免费| 91久久精品美女| 国产午夜精品麻豆| 96国产粉嫩美女| 在线播放亚洲激情| 91视频国产高清| 日韩av在线看| 国产精品一二三在线| 2021久久精品国产99国产精品| 久久精品视频亚洲| 久久久精品一区二区| 色综合久久久久久中文网| 亚洲精品免费在线视频| 亚洲美腿欧美激情另类| 欧美黑人一级爽快片淫片高清| 国产91精品久久久久久| 亚洲国产精品一区二区三区| 亚洲男人7777| 欧美又大又粗又长| 国产噜噜噜噜噜久久久久久久久| 中文字幕亚洲天堂| 色综合久久88色综合天天看泰| 亚洲性生活视频在线观看| 久久综合久久美利坚合众国| 亚洲免费av片| 亚洲人成在线电影| 夜夜嗨av一区二区三区四区| 日本sm极度另类视频| 国产在线视频2019最新视频| 欧美午夜宅男影院在线观看| 欧洲亚洲在线视频| 日韩视频精品在线| 欧美亚洲激情在线| 欧美激情一区二区三区成人| 国产精品综合不卡av| 欧美成人精品在线| 成人免费直播live| 亚洲专区中文字幕| 亚洲精品短视频| 欧美性猛交xxxx乱大交| 欧美日韩国产一区二区三区| 精品国产一区二区三区在线观看| 亚洲男人av电影| 91成人性视频| 黑人巨大精品欧美一区二区一视频| 日韩视频第一页| 国产精品69久久| www.日本久久久久com.| 欧美成人一区二区三区电影| 91成人国产在线观看| 欧美在线www| 亚洲一区二区三区视频| 色婷婷av一区二区三区在线观看| 国产成人一区三区| 国产精品嫩草影院一区二区| 国产精品狼人色视频一区| 亚洲精品一区中文| 最近2019中文字幕大全第二页| 国产91精品黑色丝袜高跟鞋| 免费97视频在线精品国自产拍| 久久伊人免费视频| 亚洲一级黄色片| 日韩专区中文字幕| 亚洲一区中文字幕| 久久精品99久久久香蕉| 国产精品自拍偷拍视频| 日韩在线资源网| 夜色77av精品影院| 97婷婷大伊香蕉精品视频| 中文字幕v亚洲ⅴv天堂| 欧美视频专区一二在线观看| 第一福利永久视频精品| 久久大大胆人体| 欧美一区二区三区免费观看| 影音先锋欧美在线资源|