熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

為 Web 服務構建 Struts 應用程序

2022-06-13   來源: Java開源技術 

  當您要將企業應用程序轉變成與 Web 服務一起使用時最簡單的途徑就是將單個操作與單個的企業服務結合在一塊但這並不是最好的方法在本文中Jerome Josephraj 將向您展示如何構架基於分層的正確的模型-視圖-控制器(MVC)設計模式的Web 服務應用程序為此他修改了 Struts(一種流行的開放源碼MVC 框架)以使其適用於 Web 服務領域通過研究此處所概述的樣本應用程序您將知道如何才能將 Struts 與 Web 服務聯合起來使用
  
  不斷發展的 Java 編程語言和 Sun 公司的 JEE 規范使得遵守各類准則的軟件開發者們能夠創建出分布式計算應用程序這些應用程序在以前只能通過相關專門工具才可實現這樣當某些開發團體要選擇在 Java 平台中實現新系統時其他團體就會通過另外的技術來創建提高並維護應用程序然後將它們集成到已有的各類分布式應用程序中去這種情形就引起了互操作性的競爭新應用程序與舊應用程序如何交互呢?答案就是Web 服務Web 服務是程序設計新的聖杯它們能夠共享並協調分散的各類計算資源
  
  在本文中您將了解實現此目的的一種方法您將看到如何在與 Web 服務相結合的開放源碼 Struts 框加的基礎上來構建應用程序在開始之前您必須了解一些 JEE 與 Web 服務的相關知識這裡我將簡要地介紹下 Struts 架構與模型-視圖-控制器(MVC)如果您以前沒碰到過那麼您應該在後面先看下 參考資料 部分來獲取更多信息
  
  MVC 模式分離開發角色
  MVC 設計模式很清楚的劃定了程序員與設計者的角色界限換句話說從商業邏輯上拆解了數據這種模式是讓設計者集中於設計應用程序的顯示部分而開發者則集中於開發驅動應用程序功能所需的組件
  
  MVC 模式有好幾種變異不過它們都是基於相同的基礎結構應用程序的數據模型 (Model)顯示層代碼(View)以及程序控制邏輯( Controller) 是存在其中的獨立但能相互間通信的組件模型組件描述並處理應用程序數據視圖指的是用戶界面它反映的是模型數據並把它遞交給用戶控制器是將視圖上的行為(例如按下 Submit 按鈕)映射到模型上的操作(例如檢索用戶詳細信息)模型更新後視圖也被更新用戶就能夠完成更多行為MVC 模式使代碼易懂而且使代碼更容易重用另外在很多工程中視圖經常要被更新MVC 模式將模型和控制器與這些所做的更改獨立開來
  
  
MVC 設計模式

  
 

  Struts基於 MVC 的堅固框架
  Struts 是 MVC 模式基礎上構建 Web 應用程序的一種開放源碼框加Struts 鼓勵在 MVC 模式上構建應用程序而且提供大多數 Web 應用程序所共有的服務
  
  在 Struts 應用程序中您可以構建模型層這樣業務邏輯與數據檢索邏輯重用就很容易了這層負責運行應用程序的業務邏輯獲取相關數據(例如運行 SQL 命令或者讀取平面文件)
  
  Struts 鼓勵在模型-視圖-控制器設計范例基礎上構建應用程序Struts 提供自己的控制器組件(ActionController 類)並與其他技術相結合來提供模型與視圖對於模型(Model 類) Struts 能與任何標准的數據訪問技術相結合包括 EJBJDBC 以及 ObjectRelational Bridge對於視圖(ActionForm 類)Struts 在 JSP 環境以及其他基於表示邏輯的系統中運行的很好 闡明了基於 Struts 應用程序的邏輯流程
  
  
Struts 應用程序的邏輯流

  
 

  簡單粗糙的 Web 服務體系結構
  
  構建 Web 服務最簡單的途徑就是將單個操作與單個企業服務結合起來如圖 所示在這種設計方法中實現業務邏輯的服務與實現數據檢索的服務是混合在一起的
  
  
簡單粗糙的 Web 服務體系結構

  
 

  這樣的一種 Web 服務可以很容易從已有的業務組件中開發出來然而它有很多的缺點對用戶沒有提供統一認證提供者與訂閱者耦合不緊業務邏輯沒有重用簡而言之對於一個連貫的解決方案來說這並不是一個非常好的體系結構
  
  在 MVC 模式基礎上來實現 Web 服務解決方案會更好點在後續部分您將看到如何使用 Struts 來做到這一點我將通過 WSManager 層來詳述現有的 Struts 架構這一層展示了采用 Web 服務的模型服務方法
  
  采用 Struts 應用程序的 Web 服務
  在以後的開發工作中您可以擴大構建得比較好的 Struts 應用程序來支持 Web 服務前面講過Struts 架構清晰地區分開了視圖控制器以及模型模型包含所有必須的業務邏輯從存儲數據倉庫中檢索數據您可以構建一個簡單的 Web 服務層——稱為 WSManager 層——這樣的模型可以提供 Web 服務也可以訂購 Web 服務使用這種體系結構的應用程序將基於組件開發的最佳點與萬維網結合在了一起如 圖 所示
  
  
采用 Web 服務的 Struts 應用程序

  

  下面的部分要討論的是這種體系結構中不同組件的詳細信息特別要密切注意 WSManager 層因為它是此體系結構中真正新加的部分
  
  Struts 控制器
  MVC 體系結構的控制器部分主要集中於接收客戶端的請求(一般為運行 Web 浏覽器的用戶)決定執行哪一種業務邏輯功能來響應請求然後負責生成下一個用戶界面連接到合適的視圖組件上去在 Struts 中控制器的主要組件就是 ActionServlet 類的一個小服務程序
  
  ActionServlet 負責通過 XML 文檔將 URI 請求映射到特定的行為這個文檔包含了 URI 請求列表而且還告知 ActionServlet 它應該如何分配每個請求這種方法有幾個好處
  
  應用程序的整個邏輯流程在分級文本文件中
  這種格式的列表更容易查看與理解尤其是對於一個很大的應用程序而言
   ActionServlet 決定了應用程序的流程許多 Action 類都繼承了 ActionServlet 每個 Action 類
  
  都映射到各自獨立的處理過程
  通過 Struts 的 ActionController 與 Struts JSPs 相結合
  作為繼承 Struts中 Action 類的一個 Java 類來實現
  Struts中 Action 類調用 WSManager 類中的相關方法來使用 Web 服務 WSManager 獲取所要求的響應——或者如果有一個被解除了就會出現異常——將它回傳給 Struts 控制器
  
  WSManager
  WSManager 接收 JAXRPC 端點的請求將 WSManager 類中的方法調用映射到新來的客戶端請求這些新來的客戶端請求是 SOAP 信息的格式WSManager 必須實現安全認證轉變參數在指定請求到模型服務之前要對這些請求進行參數預處理請求所包含的參數形式有 Java 對象Java原始參數XML 文檔或者甚至是 SOAP 文檔分片(例如SOAP Element 對象)這些類型必須要轉化成內部所支持的 schema(例如預定義的 Java 數據訪問對象)
  
  雖然 WSManager 可以很直接地處理與 Java 對象結合的參數但它還需要采取一些附加步驟來處理 XML 文檔建議以下步驟
  
   WSManager 類應該能夠通過XML Schema來驗證XML文檔的有效性
   WSManager 類接著要把 XML 文檔轉化成內部支持的 schema
  最後 WSManager 應該分解文檔並且盡可能地將它映射到域對象中去
   WSManager 實現以下任務是非常重要的
  
  身份驗證和授權使用
  錯誤處理
  緩存
   WSManager 也可以生成響應這個過程由方法調用返回值的簡單構造所組成WSManager 中保留這樣的功能您可以通過緩存數據從而避免重復訪問模型服務層您還可以集中管理響應聚集以及 XML 文檔轉換如果您要返回給調度者的文檔必須遵守與內部 schema 不同的 schema 時這一點就顯得尤其重要
  
   WSManager 處理所有SOAP 請求並把它們委派到模型層所暴露的業務邏輯如果模型服務是作為一個 EJB 層來實現那您一樣可以在 EJB 層中通過 Session Fa?ade 設計模式來實現如果您采用這種模式執行 WSManager 您將獲得很多好處因為 WSManager 會:
  
  作為初始聯系點來管理請求與服務
  調用安全服務包括身份驗證與授權使用從而避免任何重復的層訪問
  委派業務處理(采用由 Struts 應用程序所使用的模型服務)
  在 WSManager 層緩存數據避免任何不必要的數據庫訪問
  發布者展示 Web 服務
  在 WSManager 類中實現的每一個公共方法都將作為一種 Web 服務發布出來換句話說您要為這些類發布一種 Web 服務描述 Web 服務描述是由服務的 Web 服務描述語言(Web Services Description LanguageWSDL)描述與由它所引用的任何 XML schema 所組成(WSDL 是描述服務的標准語言
  
  您可以在公共注冊中心或在企業內的公司注冊表上發布 Web 服務描述同樣你也可以發布由WEB 服務定義的XML Schema到同一個公共的或者公司專有的(UDDI)注冊中心上 Java Web 服務客戶端采用 JAXR 應用編程接口來查詢公司或公共注冊表上的服務描述
  
  如果您的客戶都是專有的合作伙伴那您就不需要使用注冊表了不過您可以在您的應用程序的 Web 層或者在具備適當安全保護的熟知位置來發布您的 Web 服務描述( WSDL 和 XML schemas)例如假想有一個轉售者的客戶應用程序他與某個特殊廠商有協定客戶應用程序已經在廠商開發時
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28171.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.