首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

XML 與 J2EE 深度融合:數據交換、消息驅動與表現層的三重奏

     編輯:Java 相關知識

核心觀點:XML 是 J2EE 架構的「通用血液」

J2EE 提供分層架構(Web、EJB、EIS),XML 提供跨層、跨系統的自描述數據格式。兩者結合形成「強大平台 + 靈活數據」的黃金組合。本文系統梳理 XML 在 J2EE 三大層面的應用模式及演進路線。

一、數據表示與交換層:持久化與對象映射

場景

媒體資產元數據(圖片、視頻、文檔)以 XML 存儲/傳輸,需映射為 Java 領域對象 (MediaAsset)。

基於 DOM 的解析器封裝 (MediaParser)

public class MediaParser implements ErrorHandler {
    private final DOMParser parser = new org.apache.xerces.parsers.DOMParser();
    public MediaParser() {
        parser.setFeature("https://xml.org/sax/features/validation", true);
        parser.setErrorHandler(this);
    }
    public Document parse(String url) throws SAXException, IOException {
        parser.parse(url);
        return parser.getDocument();
    }
    public Collection loadAssets(String url) throws SAXException, IOException {
        Document doc = parse(url);
        List list = new LinkedList<>();
        NodeList nodes = doc.getElementsByTagName("media-asset");
        for (int i = 0; i < nodes.getLength(); i++) {
            list.add(new MediaAsset(nodes.item(i)));
        }
        return list;
    }
    // ErrorHandler 方法省略...
}

領域對象構建 (MediaAsset)

構造函數接收 org.w3c.dom.Node,遍歷子節點填充字段,遇到嵌套 media-asset 遞歸構建子對象。

技術演進路線

  • JAXP (Java API for XML Parsing):統一 SAX/DOM 工廠接口,解耦具體解析器 (Xerces/Crimson)。
  • XML Schema + Data Binding (Castor/JAXB):從 Schema 自動生成綁定類,消除手工映射代碼。
  • EJB CMP/CMR:實體 Bean 直接映射 XML 部署描述符,容器管理持久化。

二、面向消息計算層:JMS + XML = 企業級異步總線

痛點

JMS TextMessage 對 XML 內容不透明,無法基於內容路由(如:僅推送視頻流給支援客戶端)。

解決方案演進

  1. 應用層解析 + Header 裝填:消費者解析 XML,提取關鍵字段設置 JMS Header/Property,再路由——雙方均需編碼。
  2. 廠商擴展 (BEA WebLogic XMLMessage):支援 XPath 選擇器直接過濾 XML Body,但鎖定廠商。
  3. 標準化:JAXM (JSR 67):Sun 主導,基於 ebXML/MSG 標準,提供高層消息組裝/發送 API,底層可映射至 JMS、SMTP、HTTP 等傳輸。

代碼片段:XML 文檔裝入 TextMessage

TextMessage msg = session.createTextMessage();
msg.setText(xmlDocumentAsString); // 或用 DOM 輸出
msg.setStringProperty("mediaType", "video"); // 輔助路由
producer.send(msg);

三、表現層:JSP + JavaBean + 自定義標籤 / XSLT

模式 A:JavaBean + JSP 腳本片段

<% MediaParser parser = new MediaParser();
   Collection assets = parser.loadAssets("https://.../lecture14-assets.xml");
   Iterator it = assets.iterator(); %>
<table><tr><th>Name</th><th>Type</th><th>URN</th></tr>
<% while (it.hasNext()) {
      MediaAsset a = (MediaAsset) it.next(); %>
  <tr><td><%= a.getName() %></td>
      <td><%= a.getType() %></td>
      <td><%= a.getUrn() %></td></tr>
<% } %>
</table>

模式 B:自定義 JSP 標籤 (推薦)

<%@ taglib uri="https://javaschool.org/taglib" prefix="media" %>
<media:load url="https://.../lecture14-assets.xml" collectionName="assets" cursorName="asset"/>
<table>
  <tr><th>Name</th><th>Type</th><th>URN</th></tr>
  <c:forEach items="${assets}" var="asset">
    <tr><td><%= asset.getName() %></td>...</tr>
  </c:forEach>
</table>

優勢:邏輯封裝在 Tag Handler 類中,頁面乾淨,職責分離清晰。

模式 C:XSLT 轉換

  • 樣式表定義 XML→HTML 映射,JSP 僅調用 Transformer。
  • 優點:表現邏輯完全外部化,非程序員可維護樣式表。
  • 缺點:XSLT 介於代碼與內容之間,責任歸屬易模糊;複雜邏輯難寫。

Servlet Filter 多端適配

J2EE 1.3 引入 Filter,可攔截回應,根據 User-Agent 以 XSLT 將同一 XML 輸出為 HTML / WML / cHTML,實現「一份數據、多端呈現」。

標準演進時間軸

J2EE 版本XML 相關規範
1.2.1僅 XML 部署描述符
1.3強制內建 SAX2、DOM2、XSLT 處理器
1.4 / Java EE 5+JAXM (JSR 67)、JAX-RPC (JSR 101)、JAXB (JSR 31)、JAXR (JSR 93) 陸續納入
Java EE 6/7/8JAX-WS、JAX-RS、JSON-P/B、WebSocket 等現代 API 取代早期 XML 中心棧

總結與展望

XML 在 J2EE 歷程中扮演了「數據通用語言」角色,推動了 EAI、Web Services、SOA 的興起。雖然微服務時代 JSON/Protobuf 逐漸取代 XML,但 XML 在文檔型數據、標準化交換 (ebXML、HL7、FpML)、工具鏈成熟度上仍具不可替代優勢。理解 XML 與 J2EE 各層的結合模式,有助於維護遺產系統、設計跨語言集成方案、並在適當場景選擇 XML 而非盲目跟風 JSON。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved