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

以 XML/XSLT 重構 Struts 視圖層:Model 2x 架構詳解

     編輯:Java 相關知識

從 Model 1 到 Model 2 的演進

  • Model 1: JSP 混合業務邏輯與顯示邏輯,簡單但難維護,不適合複雜專案
  • Model 2 (MVC): Struts 提供中央控制器 Servlet、Action/ActionForm、JSP 視圖、標籤庫,實現關注點分離

Struts/JSP 現存缺陷

  1. 開發者易在 JSP 植入業務邏輯,導致結構混亂
  2. JSP 對 XML 支援弱,難保證輸出 Well-Formed XML/HTML
  3. 四大標籤庫(HTML, Bean, Logic, Template)學習成本高
  4. 視圖組合僅限 include/forward,版面與風格分離困難
  5. JSP 修改需重新編譯,開發週期長

Model 2x:XML/XSLT 取代 JSP

核心思想:保留 Struts Controller 與 Model,視圖層改用 XSLT Servlet + XSLT 樣式表。

  • Action 處理完業務邏輯,產生 Result Bean
  • XSLT Servlet 自動將 Form Bean、Request Bean、Session Bean 及上下文資源序列化為 XML DOM 樹
  • 套用 XSLT 樣式表轉換為 XHTML、WML、PDF、SVG 等任意格式
  • 無需修改 Struts 核心代碼,僅需註冊 XSLT Servlet

處理流程圖

Model 2x 處理流程

XML 序列化機制

遞歸內省 Bean 屬性(基本型別或 Collection),建立 DOM 結構。範例:

<page name="TestForm">
  <request>
    <TestForm>
      <testString>My Test String</testString>
      <testList>
        <item>One</item>
        <item>Two</item>
        <item>Three</item>
      </testList>
    </TestForm>
  </request>
</page>

XML/XSL 工作流程

XSLT 轉換範例

<xsl:template match="page">
  <h2>Please enter some text and submit</h2>
  <form name="testForm" method="get" action="result">
    <input type="text" name="testString" value="{request/TestForm/testString}"/>
    <select name="outSelect">
      <xsl:for-each select="request/TestForm/testList/item">
        <option><xsl:value-of select="."/></option>
      </xsl:for-each>
    </select>
    <input type="submit" value="Submit"/>
  </form>
</xsl:template>

輸出標準 XHTML,元素名可預測,樣式表編寫直觀。

Model 2x 核心優勢

優勢說明
業務與表現徹底分離XSLT 樣式表無法輕易植入 Java 邏輯(擴展函數無移植性),強制分離
標準技術棧XPath/XSLT 為 W3C 標準,功能超越 Struts 標籤庫,支援函數、遞歸、條件判斷
國際化機制現代化資源自動放入 DOM,依語系動態切換樣式表,非 Java ResourceBundle
錯誤處理一體化ActionError 序列化入 DOM,樣式表依錯誤類型決定顯示方式
多格式輸出同一 XML 來源,套用不同樣式表產出 HTML 3.2/4.0、XHTML、WML、PDF、SVG、CSV...
版面與風格分離樣式表可模組化:內容樣式表定義資料結構,版面樣式表定義表格樣式,互不干擾

效能優化策略

  • 採用 SAX 取代 DOM 建樹,降低記憶體佔用與延遲
  • XSLT 樣式表預編譯為 Translets (Xalan 支援),大幅提升轉換速度
  • 客戶端 XSLT 轉換(IE5+/Mozilla 支援)分擔伺服器負載,搭配 XInclude 快取資源

限制與未來展望

  • Struts struts-config.xml 工作流控制在 Model 2x 中弱化,需自行擴充
  • 客戶端轉換需確保 XML/XSLT 內容無機密資料洩露風險
  • Cocoon 框架展示了更成熟的 Pipeline 架構,可作為進階參考

結語

Model 2x 以 XML/XSLT 強化 Struts 視圖層,實現更純粹的 MVC 分離、標準化技術棧、多通道輸出與敏捷開發。對追求架構整潔、跨裝置輸出的團隊極具吸引力。

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