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

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

XML和J2EE的完美結合

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

  當前,java 2平臺企業版(J2EE)架構在廠商市場和開發者社區中倍受推崇。作為一種工具,可擴展標記語言(xml)簡化了數據交換、進程間消息交換這一類的事情,因而對開發者逐漸變得有吸引力,并開始流行起來。自然,在J2EE架構中訪問或集成XML解決方案的想法也很誘人。因為這將是強大系統架構同高度靈活的數據治理方案的結合。
  XML的應用似乎是無窮無盡的,但它們大致上可以分為三大類:
  ●簡單數據的表示和交換(針對XML的簡單API(SAX)和文檔對象模型(DOM)語法解析,不同的文檔類型定義(DTDs)和概要(schemas))
  ●面向消息的計算(XML-RPC(遠程過程調用),SOAP協議,電子化業務XML(ebXML))
  ●用戶界面相關、表示相關的上下文(可擴展樣式表語言(XSL),可擴展樣式表語言轉換(XSLT))
  這幾類應用在J2EE架構中恰好有天然的對應:數據表示和交換功能是EJB組件模型中持久化服務(persistence services)的一部分,基于消息的通訊由Java消息服務(JMS)API來處理,而界面表示正是Java服務器頁面(jsp)和Java Servlets的拿手好戲。
  在本文中,我們將看到當今基于J2EE的應用里,XML是如何在上述幾個方面進行應用的,以及在相關標準的未來版本中這些應用將會如何發展。
  基礎:數據的表示和交換
  原型化的XML應用(假設有的話)的內容通常是:數據以XML格式存放,為了進行顯示、修改甚至寫入某個XML文檔而經常被讀入到某個對象模型中。作為例子,假定我們正處理多種類型的媒體(圖品、視頻、文本文檔等等),并且用下面這個簡單的XML DTD來描述這些媒體的元數據:
  <!-- DTD for a hypothetical media management system -->
 ?。?-- Media assets are the root of the object hierarchy. Assets are also
  hierarchical - they can contain other assets. -->
  <!ELEMENT media-asset (name, desc?, type*, media-asset*, urn)>
 ?。?-- Metadata about the asset -->
  <!ELEMENT name (#PCDATA)>
 ?。?ELEMENT desc (#PCDATA)>
  <!ELEMENT type (desc, mime-type?)>
 ?。?ELEMENT mime-type (#PCDATA)>
  <!ELEMENT urn (#PCDATA)> 
   以下是一個基于上述媒體DTD的XML文檔,描述了與某個課程講座相關的內容:
  <?xml version="1.0" ?><!DOCTYPE media-asset PUBLIC "-//Jim Farley//DTD
  Media Assets//EN" "http://localhost/Articles/Sun/dtds/media.dtd">
 ?。糾edia-asset>
  <name>第14講</name>
 ?。糳esc>與第14講相關的所有內容</desc>
 ?。?-- 內容對象"lecture 14"的一套子組件 -->
 ?。糾edia-asset>
  <name>講座的幻燈片</name>
 ?。紅ype>
  <desc>MS Powerpoint</desc>
 ?。糾ime-type>application/vnd.ms-powerpoint</mime-type>
  </type>
 ?。紆rn>http://javatraining.org/jaf/E123/lecture-
  14/slides.PPT</urn>
  </media-asset>
 ?。糾edia-asset>
  <name>講座的視頻片斷</name>
 ?。紅ype>
  <desc>RealPlayer streaming video</desc>
 ?。糾ime-type>video/vnd.rn-realvideo</mime-type>
  </type>
 ?。紆rn>http://javatraining.org/jaf/E123/lecture-
  14/lecture.rv</urn>
  </media-asset>
 ?。?-- 講座開始 -->
  <urn>http://javatraining.org/jaf/E123/lecture-14/index.jsp</urn>
 ?。?media-asset> 
  從Web或者企業級應用的角度看,能以這種方式訪問數據真是一種福音,因為它體現了高度的可移動性,使我們與元數據的實際資源本身隔離。這些資源可能來自一個關系數據庫系統、某種活動媒體服務器或者Web服務器上的一個靜態XML文檔,等等。假如想把這些數據加載到Java應用中,我們可以從當前眾多的Java語言XML解析器中選用一個,通過它將XML數據裝入一個DOM文檔,最后遍歷文檔,將所有這些數據轉換到我們應用系統的對象模型中。
  下面是個簡單的基于DOM的解析程序,可對上述的媒體DTD進行解析。解析器用的是Apache Xerces:  
  package jaf.xml;
  import java.util.*;
  import java.io.IOException;
  import org.w3c.dom.*;
  import org.xml.sax.*;
  // XML文檔解析程序,使用上述媒體DTD.
  public class MediaParser implements ErrorHandler {
  /** 使用Apache Xerces解析器 */
  org.apache.xerces.parsers.DOMParser mParser =
  new org.apache.xerces.parsers.DOMParser();
  /** 構造函數 */
  public MediaParser() {
  // 告訴解析器驗證并解析文檔
  try {
  mParser.setFeature( "http://xml.org/sax/features/validation",
  true);
  }
  catch (SAXException e) {
  System.out.  e.printStackTrace();
  }
  // 設置解析器的錯誤處理句柄
  mParser.setErrorHandler(this);
  }
  /** 解析指定的URL,返回找到的XML文檔
  */
  public Document parse(String url) throws SAXException, IOException {
  mParser.parse(url);
  Document mediaDoc = mParser.getDocument();
  return mediaDoc;
  }
  /** 解析指定URL的XML文檔,將內容轉換成 MediaAsset 對象
  */
  public Collection loadAssets(String url) throws SAXException,
  IOException {
  Document doc = parse(url);
  Collection assets = new LinkedList();
  NodeList assetNodes = doc.getElementsByTagName("media-asset");
  for (int i = 0; i < assetNodes.getLength(); i++) {
  Node assetNode = assetNodes.item(i);
  MediaAsset asset = new MediaAsset(assetNode);
  assets.add(asset);
  }
  return assets;
  }
  /**
  * 錯誤處理代碼(為簡潔起見省略了)
  */
  } 
  
  MediaParser類的構造函數初始化了一個Xerces DOM解析器。parse()方法告訴解析器到哪個URL去找XML源,然后得到結果文檔并返回。loadAssets()方法調用parse()方法從某個XML源加載文檔,然后為文檔中找到的每個“media-asset”節點創建一個MediaAsset對象。
  
  以下是一個使用MediaAsset類的例子:
  
  package jaf.xml;
  import java.util.*;
  public class MediaAsset {
  // 資源元數據
  private String mName = "";
  private String mDesc = "";
  private Collection mChildren = new LinkedList();
  private Vector mTypes = new Vector();
  private String mUrn = "";
  protected MediaAsset(org.w3c.dom.Node assetNode) {
  // 為簡潔起見省略后面代碼
  .
  .
  .
  }
  } 
  因為篇幅的關系省略了MediaAsset類的具體代碼,但應用模式依然是清楚的。MediaAsset類遍歷文檔的節點,當它碰到不同的子節點時,它用子節點的內容填充自己的成員數據。假如它發現了一個嵌套的子資源節點,它只需要創建一個新的MediaAsset對象,然后將子資源節點的數據填充到新對象的成員數據中。
  實現上述處理的方法數不勝數。我們還可以使用其他的解析器或解析器架構,如Java API for XML Parsing (JAXP)。除了使用DOM模型外,事件驅動的SAX模型也可用于解析XML。類似的程序也可用來產生XML數據——前提是答應產生新的數據對象(在本例中是MediaAsset),它可將其相應的XML實體插入到DOM中,然后將DOM輸出到一個流中(諸如一個文件,一個Socket,或者一個HTTP連接...)。還有其他更高層次的標準,可將XML映射到Java對象的過程進一步自動化(或簡化)。例如,使用XML概要(Schema)和XML綁定處理引擎,您可以半自動地將滿足某個XML 概要的XML數據轉變成Java數據對象。代表性的引擎是Castor,是由ExoLab小組治理的一個開放源代碼項目的產物。上述使用Xerces DOM的簡單例子僅僅是演示了這一處理過程的底層模型。
  上述示例表明,在Java環境中解析或產生XML是非常方便的,這與J2EE沒有必然關聯。格式化為XML的數據可以從應用程序的任何層次流入或輸出,這使得與外部系統的集成性無可限量。但我們能否以一種更為直接的方式將XML數據源集成到J2EE架構中去呢?
  駕馭消息
  J2EE架構包含了對JMS(Java消息服務)API的訪問,以實現面向消息的通信(J2EE 1.2.1版只需JMS API即可,在J2EE 1.3版中JMS基本定型,此時必須由某個兼容J2EE平臺的服務器提供一個JMS API Provider)。這一類的異步交互(與之相對的是:本地或遠程方法調用所代表的同步交互)被證實在某些應用環境中是非常有用的。某些時候,交互只需要通過間接的請求或回答來實現,即:在某些情況下,發出消息后不可能立即收到答復,但我們仍希望當消息發出者重新在線時,確保他能收到答復信息。
  面向消息系統的實際應用之一就是企業之間的松散集成。類似于EDI(電子文檔交換)時代的文檔交換,兩個企業由于業務的需要而交換消息,此時通常不能為了使用RPC或者RMI、CORBA、DCOM之類的遠程方法交互而在兩者之間進行緊密集成。象JMS API這樣的消息系統答應雙方交換基于JMS API的消息載荷,前提是雙方在會話的時候均能提供兼容的JMS API服務。當前仍然存在的困難是

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕久精品免费视频| 精品视频—区二区三区免费| 日韩欧美中文字幕在线观看| 欧美亚洲免费电影| 久久精品一本久久99精品| 亚洲国产私拍精品国模在线观看| 性欧美办公室18xxxxhd| 欧美日韩国产一区中文午夜| 91视频免费网站| 在线看片第一页欧美| 91精品国产亚洲| 91在线免费看网站| 欧美成人精品不卡视频在线观看| 欧美成人中文字幕在线| 精品国产欧美一区二区三区成人| 久久久久久久久久亚洲| 国产成人精品电影| 成人激情在线观看| 91久久在线观看| 欧美日韩国产成人| 久久精品国产96久久久香蕉| 国产精品一区久久| 伊是香蕉大人久久| 亚洲欧洲日韩国产| 国产精品女主播| 色哟哟网站入口亚洲精品| 国产成人精品一区二区| 亚洲精品成人久久电影| 两个人的视频www国产精品| 国产香蕉一区二区三区在线视频| 亚州精品天堂中文字幕| 日本中文字幕成人| 91亚洲一区精品| 亚洲视频一区二区| 日韩精品免费在线视频观看| 欧美精品日韩www.p站| 欧美激情精品久久久久久大尺度| 国产精品1区2区在线观看| 国产69久久精品成人| 日韩精品视频在线观看免费| 国产日本欧美一区二区三区在线| 欧美成人免费在线观看| 日韩av最新在线| 欧美三级免费观看| 久久97精品久久久久久久不卡| 黑丝美女久久久| 精品国产拍在线观看| 国产成人精品在线播放| 日本国产高清不卡| 欧美另类精品xxxx孕妇| 欧美性猛交xxxx黑人| 亚洲综合在线中文字幕| 久久久久久91| 中文字幕在线国产精品| 国产精品入口日韩视频大尺度| www国产精品视频| 91在线视频精品| 97免费中文视频在线观看| 国产精品盗摄久久久| 日韩小视频网址| 综合久久五月天| 91chinesevideo永久地址| 中文字幕无线精品亚洲乱码一区| 久久精品91久久久久久再现| 久久久成人精品视频| 国产欧美va欧美va香蕉在线| 美日韩精品视频免费看| 亚洲xxxxx性| 日韩成人av网址| 韩国三级电影久久久久久| 欧美日韩激情美女| 92国产精品视频| 日产精品久久久一区二区福利| 久久伊人免费视频| 久久久影视精品| 日韩欧美在线免费| 久久久亚洲福利精品午夜| 欧美亚洲伦理www| 久久精品视频在线| 国产综合视频在线观看| 日日噜噜噜夜夜爽亚洲精品| 久久精品国产视频| 欧美一性一乱一交一视频| 亚洲国产精品va在看黑人| 亚州国产精品久久久| 亚洲欧美日本伦理| 国产国语videosex另类| 久久国内精品一国内精品| 国产精品美女av| 欧美日本国产在线| 91国产视频在线| 国产精品第一区| 91精品国产高清久久久久久| 中文字幕不卡在线视频极品| 国产精品电影一区| 亚洲电影免费在线观看| 国产精品久久久久久久天堂| 97久久精品在线| 久久久在线视频| 中文字幕在线精品| 伊人久久久久久久久久| 欧美国产日韩xxxxx| 国产亚洲欧美一区| 色无极影院亚洲| 91精品啪aⅴ在线观看国产| 日韩精品视频免费在线观看| 精品久久久久久中文字幕一区奶水| 国产欧美在线视频| 欧美野外猛男的大粗鳮| 美乳少妇欧美精品| 日韩va亚洲va欧洲va国产| 深夜福利91大全| 91精品国产高清久久久久久91| 中文字幕日韩av| 国产精品91免费在线| 欧美激情一区二区三区久久久| 色综合天天综合网国产成人网| 91精品免费看| 国产精品欧美一区二区| 黑人巨大精品欧美一区二区三区| 这里精品视频免费| 国产精品九九久久久久久久| 5278欧美一区二区三区| 色香阁99久久精品久久久| 欧美午夜xxx| 欧美一区亚洲一区| 亚洲日本欧美日韩高观看| 日韩最新中文字幕电影免费看| 精品国产乱码久久久久久虫虫漫画| 欧美精品一本久久男人的天堂| 日韩在线精品视频| 亚洲的天堂在线中文字幕| 亚洲精品一区二区网址| 欧美大片大片在线播放| 91欧美日韩一区| 欧美最猛性xxxxx亚洲精品| 国产精品入口夜色视频大尺度| 亚洲精品午夜精品| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲精品一二区| 成人av在线网址| 亚洲www永久成人夜色| 久久色精品视频| 亚洲91精品在线观看| 在线成人免费网站| 欧美日韩成人在线观看| 久久久久久久久久久人体| 国产精品国产三级国产aⅴ9色| 66m—66摸成人免费视频| 国产69精品久久久| 一色桃子一区二区| 亚洲国产精品久久91精品| 亚洲人成网站免费播放| 亚洲va久久久噜噜噜久久天堂| 亚洲国产91精品在线观看| 成人春色激情网| 九九热精品视频国产| 在线视频国产日韩| 日韩成人在线视频观看| 亚洲精品资源美女情侣酒店| 欧美亚洲成人免费| 日韩av网址在线| 久久躁日日躁aaaaxxxx| 2019中文字幕免费视频|