国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

為 Web 服務(wù)構(gòu)建 Struts 應(yīng)用程序

2019-11-18 15:55:28
字體:
供稿:網(wǎng)友

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

  
 為 Web 服務(wù)構(gòu)建 Struts 應(yīng)用程序(圖一)

  Struts:基于 MVC 的堅固框架
  Struts 是 MVC 模式基礎(chǔ)上構(gòu)建 Web 應(yīng)用程序的一種開放源碼框加。Struts 鼓勵在 MVC 模式上構(gòu)建應(yīng)用程序而且提供大多數(shù) Web 應(yīng)用程序所共有的服務(wù)。
  
  在 Struts 應(yīng)用程序中,您可以構(gòu)建模型層,這樣業(yè)務(wù)邏輯與數(shù)據(jù)檢索邏輯重用就很輕易了。這層負(fù)責(zé)運行應(yīng)用程序的業(yè)務(wù)邏輯,獲取相關(guān)數(shù)據(jù)(例如,運行 SQL 命令或者讀取平面文件)。
  
  Struts 鼓勵在模型-視圖-控制器設(shè)計范例基礎(chǔ)上構(gòu)建應(yīng)用程序。Struts 提供自己的控制器組件(ActionController 類)并與其他技術(shù)相結(jié)合來提供模型與視圖。對于模型(Model 類), Struts 能與任何標(biāo)準(zhǔn)的數(shù)據(jù)訪問技術(shù)相結(jié)合,包括 EJB、JDBC 以及 Object-Relational Bridge。對于視圖(ActionForm 類),Struts 在 jsp 環(huán)境以及其他基于表示邏輯的系統(tǒng)中運行的很好。圖 2 闡明了基于 Struts 應(yīng)用程序的邏輯流程。
  
  
圖 2. Struts 應(yīng)用程序的邏輯流

  
 為 Web 服務(wù)構(gòu)建 Struts 應(yīng)用程序(圖二)

  簡單粗糙的 Web 服務(wù)體系結(jié)構(gòu)
  
  構(gòu)建 Web 服務(wù)最簡單的途徑就是將單個操作與單個企業(yè)服務(wù)結(jié)合起來,如圖 3 所示。在這種設(shè)計方法中,實現(xiàn)業(yè)務(wù)邏輯的服務(wù)與實現(xiàn)數(shù)據(jù)檢索的服務(wù)是混合在一起的。
  
  
圖 3. 簡單粗糙的 Web 服務(wù)體系結(jié)構(gòu)

  
 為 Web 服務(wù)構(gòu)建 Struts 應(yīng)用程序(圖三)

  這樣的一種 Web 服務(wù)可以很輕易從已有的業(yè)務(wù)組件中開發(fā)出來。然而,它有很多的缺點:對用戶沒有提供統(tǒng)一認(rèn)證,提供者與訂閱者耦合不緊,業(yè)務(wù)邏輯沒有重用。簡而言之,對于一個連貫的解決方案來說這并不是一個非常好的體系結(jié)構(gòu)。
  
  在 MVC 模式基礎(chǔ)上來實現(xiàn) Web 服務(wù)解決方案會更好點。在后續(xù)部分,您將看到如何使用 Struts 來做到這一點。我將通過 WSManager 層來詳述現(xiàn)有的 Struts 架構(gòu),這一層展示了采用 Web 服務(wù)的模型服務(wù)方法。
  
  采用 Struts 應(yīng)用程序的 Web 服務(wù)
  在以后的開發(fā)工作中您可以擴大構(gòu)建得比較好的 Struts 應(yīng)用程序來支持 Web 服務(wù)。前面講過,Struts 架構(gòu)清楚地區(qū)分開了視圖、控制器以及模型。模型包含所有必須的業(yè)務(wù)邏輯,從存儲數(shù)據(jù)倉庫中檢索數(shù)據(jù)。您可以構(gòu)建一個簡單的 Web 服務(wù)層——稱為 WSManager 層——這樣的模型可以提供 Web 服務(wù)也可以訂購 Web 服務(wù)。使用這種體系結(jié)構(gòu)的應(yīng)用程序?qū)⒒诮M件開發(fā)的最佳點與萬維網(wǎng)結(jié)合在了一起,如 圖 4所示。
  
  
圖 4. 采用 Web 服務(wù)的 Struts 應(yīng)用程序

  
為 Web 服務(wù)構(gòu)建 Struts 應(yīng)用程序(圖四)

  下面的部分要討論的是這種體系結(jié)構(gòu)中不同組件的具體信息,非凡要密切注重 WSManager 層,因為它是此體系結(jié)構(gòu)中真正新加的部分。
  
  Struts 控制器
  MVC 體系結(jié)構(gòu)的控制器部分主要集中于接收客戶端的請求(一般為運行 Web 瀏覽器的用戶),決定執(zhí)行哪一種業(yè)務(wù)邏輯功能來響應(yīng)請求,然后負(fù)責(zé)生成下一個用戶界面連接到合適的視圖組件上去。在 Struts 中,控制器的主要組件就是 ActionServlet 類的一個小服務(wù)程序。
  
  ActionServlet 負(fù)責(zé)通過 xml 文檔將 URI 請求映射到特定的行為。這個文檔包含了 URI 請求列表而且還告知 ActionServlet 它應(yīng)該如何分配每個請求。這種方法有幾個好處:
  
  應(yīng)用程序的整個邏輯流程在分級文本文件中。
  這種格式的列表更輕易查看與理解,尤其是對于一個很大的應(yīng)用程序而言。
   ActionServlet 決定了應(yīng)用程序的流程。許多 Action 類都繼續(xù)了 ActionServlet 。每個 Action 類:
  
  都映射到各自獨立的處理過程
  通過 Struts 的 ActionController 與 Struts JSPs 相結(jié)合
  作為繼續(xù) Struts中 Action 類的一個 Java 類來實現(xiàn)。
  Struts中 Action 類調(diào)用 WSManager 類中的相關(guān)方法來使用 Web 服務(wù)。 WSManager 獲取所要求的響應(yīng)——或者假如有一個被解除了就會出現(xiàn)異常——將它回傳給 Struts 控制器。
  
  WSManager
  WSManager 接收 JAX-RPC 端點的請求。將 WSManager 類中的方法調(diào)用映射到新來的客戶端請求。這些新來的客戶端請求是 SOAP 信息的格式。WSManager 必須實現(xiàn)安全認(rèn)證,轉(zhuǎn)變參數(shù),在指定請求到模型服務(wù)之前,要對這些請求進行參數(shù)預(yù)處理。請求所包含的參數(shù)形式有 Java 對象,Java原始參數(shù),XML 文檔,或者甚至是 SOAP 文檔分片(例如,SOAP Element 對象)。這些類型必須要轉(zhuǎn)化成內(nèi)部所支持的 schema(例如,預(yù)定義的 Java 數(shù)據(jù)訪問對象)。
  
  雖然 WSManager 可以很直接地處理與 Java 對象結(jié)合的參數(shù),但它還需要采取一些附加步驟來處理 XML 文檔。建議以下步驟:
  
   WSManager 類應(yīng)該能夠通過XML Schema來驗證XML文檔的有效性。
   WSManager 類接著要把 XML 文檔轉(zhuǎn)化成內(nèi)部支持的 schema。
  最后 WSManager 應(yīng)該分解文檔并且盡可能地將它映射到域?qū)ο笾腥ァ?
   WSManager 實現(xiàn)以下任務(wù)是非常重要的:
  
  身份驗證和授權(quán)使用
  錯誤處理
  緩存。
   WSManager 也可以生成響應(yīng);這個過程由方法調(diào)用返回值的簡單構(gòu)造所組成。WSManager 中保留這樣的功能,您可以通過緩存數(shù)據(jù)從而避免重復(fù)訪問模型服務(wù)層。您還可以集中治理響應(yīng)聚集以及 XML 文檔轉(zhuǎn)換,假如您要返回給調(diào)度者的文檔必須遵守與內(nèi)部 schema 不同的 schema 時,這一點就顯得尤其重要。
  
   WSManager 處理所有SOAP 請求并把它們委派到模型層所暴露的業(yè)務(wù)邏輯。假如模型服務(wù)是作為一個 EJB 層來實現(xiàn),那您一樣可以在 EJB 層中通過 session Fa?ade 設(shè)計模式來實現(xiàn)。假如您采用這種模式執(zhí)行 WSManager ,您將獲得很多好處,因為 WSManager 會:
  
  作為初始聯(lián)系點來治理請求與服務(wù)
  調(diào)用安全服務(wù),包括身份驗證與授權(quán)使用,從而避免任何重復(fù)的層訪問。
  委派業(yè)務(wù)處理(采用由 Struts 應(yīng)用程序所使用的模型服務(wù))
  在 WSManager 層緩存數(shù)據(jù)避免任何不必要的數(shù)據(jù)庫訪問。
  發(fā)布者:展示 Web 服務(wù)
  在 WSManager 類中實現(xiàn)的每一個公共方法都將作為一種 Web 服務(wù)發(fā)布出來。換句話說,您要為這些類發(fā)布一種 Web 服務(wù)描述 。Web 服務(wù)描述是由服務(wù)的 Web 服務(wù)描述語言(Web Services Description Language,WSDL)描述與由它所引用的任何 XML schema 所組成。(WSDL 是描述服務(wù)的標(biāo)準(zhǔn)語言。)
  
  您可以在公共注冊中心或在企業(yè)內(nèi)的公司注冊表上發(fā)布 Web 服務(wù)描述。同樣,你也可以發(fā)布由WEB 服務(wù)定義的XML Schema到同一個公共的或者公司專有的(UDDI)注冊中心上。 Java Web 服務(wù)客戶端采用 JAXR 應(yīng)用編程接口來查詢公司或公共注冊表上的服務(wù)描述。
  
  假如您的客戶都是專有的合作伙伴,那您就不需要使用注冊表了。不過,您可以在您的應(yīng)用程序的 Web 層或者在具備適當(dāng)安全保護的熟知位置來發(fā)布您的 Web 服務(wù)描述( WSDL 和 XML schemas)。例如,假想有一個轉(zhuǎn)售者的客戶應(yīng)用程序,他與某個非凡廠商有協(xié)定。客戶應(yīng)用程序已經(jīng)在廠商開發(fā)時

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 光山县| 宁都县| 襄垣县| 当阳市| 嘉义市| 繁峙县| 台东市| 湄潭县| 青铜峡市| 英德市| 普兰县| 武定县| 綦江县| 乡宁县| 红河县| 东山县| 鄯善县| 新丰县| 抚顺县| 凭祥市| 静乐县| 蕲春县| 韩城市| 呼和浩特市| 扶沟县| 扶绥县| 盐边县| 广水市| 奉节县| 泸溪县| 青岛市| 庆云县| 松阳县| 历史| 同德县| 鞍山市| 拉萨市| 利辛县| 玛曲县| 沙湾县| 宿州市|