欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
在 Web 服務(wù)領(lǐng)域引入 MVC 模式的功能
   當您要將企業(yè)應用程序轉變成與 Web服務(wù)一起使用時(shí),最簡(jiǎn)單的途徑就是將單個(gè)操作與單個(gè)的企業(yè)服務(wù)結合在一塊。但這并不是最好的方法。在本文中,Jerome Josephraj 向您展示了如何在測試過(guò)的真正模型-視圖-控制器(MVC)設計模式的基礎上來(lái)構建 Web 服務(wù)應用程序。為此,他修改了 Structs(一種流行的開(kāi)放源碼MVC 框架),以使其適用于 Web 服務(wù)領(lǐng)域。通過(guò)研究此處所概述的樣本應用程序,您將知道如何才能將 Structs 與 Web 服務(wù)聯(lián)合起來(lái)使用。

  不斷發(fā)展的 Java 編程語(yǔ)言和 Sun 公司的 J2EE 規范使得遵守各類(lèi)準則的軟件開(kāi)發(fā)者們能夠創(chuàng )建出分布式計算應用程序,這些應用程序在以前只能通過(guò)相關(guān)屬性工具才可實(shí)現。這樣,當某些開(kāi)發(fā)團體要選擇在 Java 平臺中實(shí)現新系統時(shí),其他團體就會(huì )通過(guò)另外的技術(shù)來(lái)創(chuàng )建、提高并維護應用程序,然后將它們集成到已有的各類(lèi)分布式應用程序中去。這種情形就引起了互操作性的競爭。新應用程序與舊應用程序如何交互呢?答案就是:Web 服務(wù)。Web 服務(wù)是程序設計新的圣杯。它們能夠共享并協(xié)調分散的各類(lèi)計算資源。

  在本文中,您將了解實(shí)現此目的的一種方法。您將看到如何在與 Web 服務(wù)相結合的開(kāi)放源碼 Structs 框加的基礎上來(lái)構建應用程序。在開(kāi)始之前您必須了解一些 J2EE 與 Web 服務(wù)的相關(guān)知識。這里,我將簡(jiǎn)要地介紹下 Structs 架構與模型-視圖-控制器(MVC)。

  MVC 模式:分離開(kāi)發(fā)角色

  MVC 設計模式很清楚的劃定了程序員與設計者的角色界限。換句話(huà)說(shuō),從商業(yè)邏輯上拆解了數據。這種模式是讓設計者集中于設計應用程序的顯示部分,而開(kāi)發(fā)者則集中于開(kāi)發(fā)驅動(dòng)應用程序功能所需的組件。

  MVC 模式有好幾種變異,不過(guò)它們都是基于相同的基礎結構:應用程序的數據模型 (Model),代碼顯示(View),以及程序控制邏輯( Controller) 是存在其中的獨立但能相互間通信的組件。模型組件描述并處理應用程序數據。視圖指的是用戶(hù)接口;它反映的是模型數據并把它遞交給用戶(hù)??刂破魇菍⒁晥D上的行為(例如,按下 Submit 按鈕)映射到模型上的操作(例如,檢索用戶(hù)詳細信息)。模型更新后,視圖也被更新,用戶(hù)就能夠完成更多行為。MVC 模式使代碼易懂而且使代碼更容易重用;另外,在很多工程中視圖經(jīng)常要被更新,MVC 模式將模型和控制器與這些所做的更改獨立開(kāi)來(lái)。

       圖 1 MVC 模式概要

  Struts:基于 MVC 的堅固框架

  Struts 是 MVC 模式基礎上構建 Web 應用程序的一種開(kāi)放源碼框加。Structs 鼓勵在 MVC 模式上構建應用程序而且提供大多數 Web 應用程序所共有的服務(wù)。

  在 Struts 應用程序中,您可以構建模型層,這樣業(yè)務(wù)邏輯與數據檢索邏輯重用就很容易了。這層負責運行應用程序的業(yè)務(wù)邏輯,獲取相關(guān)數據(例如,運行 SQL 命令或者讀取平面文件)。

  Struts 鼓勵在模型-視圖-控制器設計范例基礎上構建應用程序。Structs 提供自己的控制器組件(ActionController 類(lèi))并與其他技術(shù)相結合來(lái)提供模型與視圖。對于模型(Model 類(lèi)), Struts 能與任何標準的數據訪(fǎng)問(wèn)技術(shù)相結合,包括 EJB、JDBC 以及 Object-Relational Bridge。對于視圖(ActionForm 類(lèi)),Struts 在 JSP 環(huán)境以及其他描述系統中運行的很好。圖 2 闡明了基于 Structs 應用程序的邏輯流程。

  圖 2. Struts 應用程序的邏輯流

  簡(jiǎn)單粗糙的 Web 服務(wù)體系結構

  構建 Web 服務(wù)最簡(jiǎn)單的途徑就是將單個(gè)操作與單個(gè)企業(yè)服務(wù)結合起來(lái),如圖 3 所示。在這種設計方法中,實(shí)現業(yè)務(wù)邏輯的服務(wù)與實(shí)現數據檢索的服務(wù)是混合在一起的。

  圖 3. 簡(jiǎn)單粗糙的 Web 服務(wù)體系結構

  這樣的一種 Web 服務(wù)可以很容易從已有的業(yè)務(wù)組件中開(kāi)發(fā)出來(lái)。然而,它有很多的缺點(diǎn):對用戶(hù)沒(méi)有單個(gè)簽名點(diǎn),提供者與訂閱者連接不夠緊,業(yè)務(wù)邏輯沒(méi)有重用。簡(jiǎn)而言之,對于一個(gè)連貫的解決方案來(lái)說(shuō)這并不是一個(gè)非常好的體系結構。

  在 MVC 模式基礎上來(lái)實(shí)現 Web 服務(wù)解決方案會(huì )更好點(diǎn)。在后續部分,您將看到如何使用 Structs 來(lái)做到這一點(diǎn)。我將通過(guò) WSManager 層來(lái)詳述現有的 Structs 架構,這一層展示了采用 Web 服務(wù)的模型服務(wù)方法。

  采用 Struts 應用程序的 Web 服務(wù)

  在以后的開(kāi)發(fā)工作中您可以擴大構建得比較好的 Structs 應用程序來(lái)支持 Web 服務(wù)。前面講過(guò),Structs 架構清晰地區分開(kāi)了視圖、控制器以及模型。模型包含所有必須的業(yè)務(wù)邏輯,從存儲數據倉庫中檢索數據。您可以構建一個(gè)簡(jiǎn)單的 Web 服務(wù)層(稱(chēng)為 WSManager 層)這樣的模型可以提供 Web 服務(wù)也可以訂購 Web 服務(wù)。使用這種體系結構的應用程序將基于組件開(kāi)發(fā)的最佳點(diǎn)與萬(wàn)維網(wǎng)結合在了一起,如 圖 4所示。

  圖 4. 采用 Web 服務(wù)的 Struts 應用程序

  下面的部分要討論的是這種體系結構中不同組件的詳細信息,特別要密切注意 WSManager 層,因為它是此體系結構中真正新加的部分。

  Struts 控制器

  MVC 體系結構的控制器部分主要集中于接收客戶(hù)端的請求(一般為運行 Web 瀏覽器的用戶(hù)),決定執行哪一種業(yè)務(wù)邏輯功能來(lái)響應請求,然后負責生成下一個(gè)用戶(hù)界面連接到合適的視圖組件上去。在 Structs 中,控制器的主要組件就是 ActionServlet 類(lèi)的一個(gè)小服務(wù)程序。

  ActionServlet 負責通過(guò) XML 文檔將 URI 請求映射到特定的行為。這個(gè)文檔包含了 URI 請求列表而且還告知 ActionServlet 它應該如何分配每個(gè)請求。這種方法有幾個(gè)好處:

  應用程序的整個(gè)邏輯流程在分級文本文件中。

  這種格式的列表更容易查看與理解,尤其是對于一個(gè)很大的應用程序而言。

  ActionServlet 決定了應用程序的流程。許多 Action 類(lèi)都繼承了 ActionServlet 。每個(gè) Action 類(lèi):

  都映射到各自獨立的進(jìn)程
  通過(guò) Struts 的 ActionController 與 Structs JSPs 相結合

  作為繼承 Struts中 Action 類(lèi)的一個(gè) Java 類(lèi)來(lái)實(shí)現。

  Struts中 Action 類(lèi)調用 WSManager 類(lèi)中的相關(guān)方法來(lái)使用 Web 服務(wù)。 WSManager 獲取所要求的響應(或者如果有一個(gè)被解除了就會(huì )出現異常)將它回傳給 Structs 控制器。

  WSManager

  WSManager 接收 JAX-RPC 端點(diǎn)的請求。將 WSManager 類(lèi)中的方法調用映射到新來(lái)的客戶(hù)端請求。這些新來(lái)的客戶(hù)端請求是 SOAP 信息的格式。WSManager 必須實(shí)現安全確定性,轉變參數,在指定請求到模型服務(wù)之前,要對這些請求進(jìn)行參數預處理。請求所包含的參數形式有 Java 對象,Java原始參數,XML 文檔,或者甚至是 SOAP 文檔分片(例如,SOAP Element 對象)。這些類(lèi)型必須要轉化成內部所支持的 schema(例如,預定義的 Java 數據訪(fǎng)問(wèn)對象)。

  雖然 WSManager 可以很直接地處理與 Java 對象結合的參數,但它還需要采取一些附加步驟來(lái)處理 XML 文檔。建議以下步驟:

  WSManager 類(lèi)必須能夠確定新來(lái)的 XML 文檔而不是它的 schema.
  WSManager 類(lèi)接著(zhù)要把 XML 文檔轉化成內部支持的 schema.
  最后 WSManager 應該分解文檔并且盡可能地將它映射到域對象中去。

  WSManager 實(shí)現以下任務(wù)是非常重要的:

  身份驗證和授權使用
  錯誤處理

     緩存

  WSManager 也可以生成響應;這個(gè)過(guò)程由方法調用返回值的簡(jiǎn)單構造所組成。WSManager 中保留這樣的功能,您可以通過(guò)緩存數據從而避免重復訪(fǎng)問(wèn)模型服務(wù)層。您還可以集中管理響應聚集以及 XML 文檔轉換,如果您要返回給調度者的文檔必須遵守與內部 schema 不同的 schema 時(shí),這一點(diǎn)就顯得尤其重要。

  WSManager 處理所有新來(lái)的 SOAP 請求并授權它們連接到出現在模型服務(wù)中的業(yè)務(wù)邏輯。如果模型服務(wù)是作為一個(gè) EJB 層來(lái)實(shí)現,那您一樣可以在 EJB 層中通過(guò) Session Façade 設計模式來(lái)實(shí)現。如果您采用這種模式執行 WSManager ,您將獲得很多好處,因為 WSManager 會(huì ):

  作為初始聯(lián)系點(diǎn)來(lái)管理請求與服務(wù)
  調用安全服務(wù),包括身份驗證與授權使用,從而避免任何重復的層訪(fǎng)問(wèn)。
  授權業(yè)務(wù)處理(采用由 Structs 應用程序所使用的模型服務(wù))
  在 WSManager 層緩存數據避免任何不必要的數據庫訪(fǎng)問(wèn)。

  發(fā)布者:展示 Web 服務(wù)

  在 WSManager 類(lèi)中執行的每一個(gè)公共方法都將作為一種 Web 服務(wù)發(fā)布出來(lái)。換句話(huà)說(shuō),您要為這些類(lèi)發(fā)布一種 Web 服務(wù)描述 。Web 服務(wù)描述是由服務(wù)的 Web 服務(wù)描述語(yǔ)言(Web Services Description Language,WSDL)描述與由它所引用的任何 XML schema 所組成。(WSDL 是描述服務(wù)的標準語(yǔ)言。)

  您可以在公共注冊表或在企業(yè)內的公司注冊表上發(fā)布 Web 服務(wù)描述。您還可以發(fā)布 XML schema,這些是由相同公司或公共存儲器上的 Web 服務(wù)所定義的。 Java Web 服務(wù)客戶(hù)端采用 JAXR 應用編程接口來(lái)查詢(xún)公司或公共注冊表上的服務(wù)描述。

  如果您的客戶(hù)都是特定的合作伙伴,那您就不需要使用注冊表了。不過(guò),您可以在您的應用程序的 Web 層或者在具備適當安全保護的熟知位置來(lái)發(fā)布您的 Web 服務(wù)描述( WSDL 和 XML schemas)。例如,假想有一個(gè)轉售者的客戶(hù)應用程序,他與某個(gè)特殊廠(chǎng)商有協(xié)定??蛻?hù)應用程序已經(jīng)在廠(chǎng)商開(kāi)發(fā)時(shí)間中靜態(tài)地 與 Web 服務(wù)結合在一起了。只有授權的團體才可以查詢(xún) XML schema 或者從 Web 層檢索服務(wù)描述來(lái)生成客戶(hù)端代碼。您應該在 WSManager 層中執行有效客戶(hù)的身份驗證和授權使用。

  訂購者:使用 Web 服務(wù)

  應用程序可以利用在公共注冊表或者企業(yè)內部中已存的 Web 服務(wù)。 WSManager 有解析必要的 WSDL 文件的方法并且調用相關(guān)的操作返回一個(gè)值。Structs 控制器在 WSManager 類(lèi)中調用相關(guān)方法來(lái)使用特定的 Web 服務(wù)。數據作為預定義的數據訪(fǎng)問(wèn)對象在 WSManager 和 Structs 控制器之間來(lái)回傳送。訪(fǎng)問(wèn) Web 服務(wù)時(shí)所發(fā)生的所有異常都將在 WSManager 中列舉出來(lái)并且傳回到 Struts ActionController.

  服務(wù)請求者要通過(guò)使用服務(wù)代理來(lái)搜索 Web 服務(wù);如果找到它所想要使用的 Web 服務(wù),那么它就要與服務(wù)提供者建立一個(gè)合約才能享受這個(gè)服務(wù),業(yè)務(wù)也是如此。

  WSManager 使用 WSDL 文檔、服務(wù)器名字、端口名、操作名以及包括 Java 原始類(lèi)型、Java 數組、Java 對象 或者與 XML 文檔等所有必需的請求參數一起來(lái)訂購一個(gè) Web 服務(wù)。

  如果是在 UDDI 注冊表中發(fā)布目標 Web 服務(wù),那么所有基于 Structs 的應用程序都能使用像 XMethods (請參閱參考資料)這樣的代理服務(wù)來(lái)訂購它。在執行完所請求的操作后,供應者 Web 服務(wù)返回所期望的值。 WSManager 可以更改返回值使得它與應用程序所期待的 schema 相匹配;它也可以在應用程序要求基礎上修改結果。從 WSManager 收到結果以后,Struts ActionController 能夠處理結果并傳送給相關(guān)視圖,或者還能調用相關(guān)的模型服務(wù)來(lái)完成深層處理。

  錯誤處理

  所有的錯誤都是在 WSManager 層中處理的;這就消除了不必要的服務(wù)器開(kāi)銷(xiāo)。如果模型服務(wù)是當作 EJB 層來(lái)執行的,那么其性能會(huì )得到非常顯著(zhù)地增強。

  在充當供應者角色時(shí), WSManager 拋出所有如 SOAPFaultException 這樣的異常。它還可以檢查新來(lái)的請求并且拋出所有缺少命令域的異常。您可以創(chuàng )建一個(gè)類(lèi)來(lái)跟蹤并在數據倉庫中記錄這些錯誤,以后可以做作參考。

  在充當訂購者角色時(shí), WSManager 捕捉到由服務(wù)供應者所拋出的所有 SOAP 異常并且將它們更改為 WSManager 所要求的格式。您可以記錄下所拋出的錯誤作為以后參考之用。如果需要,那么在需要時(shí)候也能夠校驗出響應值并且作為異常拋出。您可以創(chuàng )建一個(gè)類(lèi)來(lái)記錄這些異常,作為以后參考之用。 WSManager 能夠驗證響應值而且可以作為一個(gè)異常將它拋出。

  審核

  在充當供應者角色時(shí), WSManager 可以記錄下詳細信息,將來(lái)可以做為審核。使用這些信息有很多用途,像:

  在所接收到的大量采樣點(diǎn)基礎上登記客戶(hù)端。
  收集數據用作市場(chǎng)目的
  決定應用程序是否需要更新
  鑒別并捕捉流氓用戶(hù)。

  緩存

  Web 服務(wù)的客戶(hù)往往要比一般的客戶(hù)端-服務(wù)器體系結構中的客戶(hù)要多些;因此在 Web 服務(wù)體系結構中,客戶(hù)端就要做更多的工作,比如緩存。Web 服務(wù)正確使用數據緩存就可以實(shí)現其最大的性能。當服務(wù)的請求信息主要是只讀的時(shí)候或者當那些信息按照比所要求的速率變化得還要慢時(shí),您就應該考慮要在 Web 服務(wù)中使用緩存了。

  身份驗證與授權使用

  您可以在 WSManager 層中執行所有訂購者的身份驗證。所有想使用 Web 服務(wù)的客戶(hù)都要經(jīng)過(guò)這樣的身份驗證邏輯。您可以使用基本用戶(hù)身份驗證或者數字鑒定來(lái)實(shí)現此目的。

  Struts 視圖

  您要通過(guò)使用 JSP 技術(shù)來(lái)構建基于 Structs 應用程序的視圖部分。JSP 頁(yè)包含有靜態(tài) HTML 加上 動(dòng)態(tài)內容,這些內容是基于對特別行為標簽說(shuō)明(在頁(yè)面要求時(shí))的。JSP 環(huán)境包括一套標準的行為標簽。另外,在自定義標簽庫中組織了一套標準的工具,開(kāi)發(fā)者們可以使用這些工具來(lái)定義他們自己的標簽。

  Structs 框架包含有擴展的自定義標簽庫,這個(gè)庫能幫助用戶(hù)界面國際化更為全面并能非常適度地與 ActionForm 組件相互作用。視圖層比較單薄,它不提供業(yè)務(wù)邏輯。Structs 視圖是通過(guò) ActionForm 與 Structs 控制器相互作用的。

  Struts ActionForm

  ActionForms 只是一些 Java 類(lèi)而已,它繼承了 Structs 所提供的 ActionForm 類(lèi),這些類(lèi)中包含有 accessor 和 mutator 方法。 JSP 頁(yè)或者 Action 類(lèi)都會(huì )調用這些方法來(lái)聚集或檢索數據。

  模型服務(wù)

  模型服務(wù)是作為一套 Java 類(lèi)來(lái)執行的。每個(gè)模型服務(wù)組件都會(huì )提供一套服務(wù),而這些組件結合起來(lái)同樣也提供一套普通服務(wù)。 ActionController 與 WSManager 類(lèi)將數據當作預定義的數據訪(fǎng)問(wèn)對象來(lái)回傳送。在處理過(guò)程中,ActionController 或者 WSManager 可以調用相關(guān)模型服務(wù)組件中所要求的方法。這些組件將所要求的數據以數據訪(fǎng)問(wèn)對象的形式傳給模型服務(wù),模型服務(wù)執行一切必須的商業(yè)邏輯處理然后從存儲數據倉庫中取出所需要的數據。模型服務(wù)組件聚集相關(guān)的預定義數據訪(fǎng)問(wèn)對象,然后將它傳回給 ActionServlet 或者 WSManager 類(lèi)。所有的錯誤或者確認信息都會(huì )通知給 ActionServlet 或 WSManager 層。

  對于您的應用程序,您應該遵守以下的設計規則:

  模型服務(wù)不能含有任何與視圖相關(guān)的代碼(例如,會(huì )話(huà)處理)。
  所有的事務(wù)僅僅只能在 Action 或 WSManager 層中來(lái)處理。
  模型服務(wù)只能被同一模型服務(wù)組件中其他的模型服務(wù)或者高層 Action 類(lèi)所調用。

  數據存儲層

  數據存儲層由所有的存儲數據倉庫組成。例如,它可能包含有關(guān)系數據庫、平面文件或者甚至有 XML 文檔。

  示例

  我已經(jīng)附上了實(shí)現此處所討論的體系結構的一個(gè)簡(jiǎn)單示例。所有的示例代碼都包含在了 zip 文件中(請參閱下面的參考資料)。這個(gè)例子舉例說(shuō)明了一個(gè)簡(jiǎn)單的新聞 Portal。新聞內容是從數據源(這里稱(chēng)為 DataSource )傳送到 JSP 頁(yè),同時(shí)信息內容也要作為一個(gè) Web 服務(wù)發(fā)布出來(lái)。這個(gè) Portal 也可以從 StockQuote Web 服務(wù)中檢索最新的股票報價(jià)并顯示在同一個(gè) JSP 頁(yè)中。

  這個(gè) zip 文件包含了所有的源代碼和 DataSource 的 SQL 腳本。它還包含有 Struts Action 和 ActionForm 類(lèi)、模型服務(wù)類(lèi)以及用來(lái)為發(fā)布者與訂購者顯示結果及其源代碼的 JSP 頁(yè)。它同時(shí)還包含有 WSDL 文件以及客戶(hù)端源代碼來(lái)訪(fǎng)問(wèn)已發(fā)布的 NewsContent Web 服務(wù)。

  這里我不再闡述示例代碼的詳細信息了;您想要發(fā)現它的復雜性,最好的途徑就是自己去試驗。開(kāi)始時(shí),我會(huì )向您說(shuō)明應用程序如何將信息內容(存儲在 DataSource 中)和股票信息(從 Web 服務(wù)處獲得)遞交給 JSP 頁(yè)的。

  JSP 頁(yè)被加載時(shí),它就調用 Action 類(lèi),這個(gè)類(lèi)在 MVC 設計模式中充當控制器角色。 Action 類(lèi)通過(guò)傳遞預定義的數據訪(fǎng)問(wèn)對象來(lái)調用模型服務(wù)類(lèi)中的 getNews() 方法。(清單 1 中所示的一小段 Action 類(lèi)代碼說(shuō)明了如何從 Action 類(lèi)中調用模型服務(wù)。)

  getNews() 方法實(shí)現了所有必需的業(yè)務(wù)邏輯與數據檢索邏輯。一旦從數據源取出了相關(guān)數據,模型服務(wù)就可以聚集數據訪(fǎng)問(wèn)對象并將它發(fā)送回給 Action 類(lèi)。

  清單 1. Action 類(lèi)的部分代碼

/*
* Create a pre-defined Data Access Object
*/
newsSearchResultVOB = new NewsSearchResult();

/*
* Call Business layer NewsMs´s searchNews method passing the NewsCOD
* and get back a Collection of News
*/
newsList = (Vector) newsMs.getNews(newsSearchResultVOB);


/*
* Put the NewsList in the request.
*
*/
request.setAttribute(SystemConstants.NEWS_LIST, newsList);

//Set the newslist in the form
newsFrm.setNewsDetails(newsList);


// Set the NewsForm in the request
request.setAttribute(mapping.getAttribute(), newsFrm);

//return actionForward;
return mapping.findForward("success");

  從模型服務(wù)處接收到數據訪(fǎng)問(wèn)對象后, Action 類(lèi)通過(guò)傳遞轉給模型服務(wù)的同一個(gè)數據訪(fǎng)問(wèn)對象來(lái)調用 WSManager 類(lèi)中的 getStocks() 方法。 WSManager 類(lèi)中的 getStocks() 方法執行 JAX-RPC 來(lái)訂購股票 Web 服務(wù)。

  從股票 Web 服務(wù)獲得的結果要轉變成本地的 schema 并且聚集回到預定義數據訪(fǎng)問(wèn)對象中去。這個(gè)對象從它被調用的地方傳回到 action 類(lèi)。 清單 2 闡明了如何使用 WSManager 中的 JAX-RPC 來(lái)訂購 Web 服務(wù),以及如何將股票 Web 服務(wù)的結果轉變成本地 schema 并聚集回到數據訪(fǎng)問(wèn)對象中去。

  清單 2. 訂購 Web 服務(wù)及傳送響應

public Vector getStocks() throws Exception {
//Method level variables
Vector stockValues = new Vector();

try {
// create service factory
javax.xml.rpc.ServiceFactory factory =
javax.xml.rpc.ServiceFactory.newInstance();

// define targetNameSpace
String targetNamespace = "http://www.themindelectric.com/"
+ "wsdl/net.xmethods.services.stockquote.StockQuote/";

// define qname
QName serviceName =
new QName(targetNamespace,
"net.xmethods.services.stockquote.StockQuoteService");

// define portname
QName portName =
new QName(targetNamespace,
"net.xmethods.services.stockquote.StockQuotePort");

// define operation name
QName operationName = new QName("urn:xmethods-delayed-quotes",
"getQuote");

//Specify wsdl location
java.net.URL wsdlLocation =
new java.net.URL("http://services.xmethods.net/soap/urn:xmethods-
delayed-quotes.wsdl");

// create service
javax.xml.rpc.Service service =
factory.createService(wsdlLocation, serviceName);

// create call
javax.xml.rpc.Call call =
service.createCall(portName, operationName);

//Populate an array with list of stock names
Vector populatedStockNames = this.getPopulatedList();

//Loop through the populated list, and for each stock get a result
java.util.Iterator i = this.getPopulatedList().iterator();
String stockName = null;
Float result;
com.ddj.wsstruts.valueobject.StockValue stockValue = null;
while(i.hasNext()) {
stockName = (String) i.next();

// invoke the remote web service
result = (Float) call.invoke(new Object[] {stockName});

if(category.isDebugEnabled()) {
category.debug(" The quote for " + stockName + " is: " + result);
}

//Set stock name and stock values in stockValue bean
stockValue = new com.ddj.wsstruts.valueobject.StockValue();
stockValue.setStockName(stockName);
stockValue.setStockValue(result.toString());

//Add the stockValue bean to stockValues vector
stockValues.add(stockValue);
}
}

  一旦 Action 類(lèi)調用完模型服務(wù)和 WSManager, ActionForm 中的股票值及信息內容域就會(huì )被填充??刂凭捅环祷氐?JSP 頁(yè)面,從 ActionForm 獲取所有必需的值并打印 UI.

  結束語(yǔ)

  在本文中,您看到了 Structs 架構是如何與 Web 服務(wù)相集成的。您也了解了如何使用 Structs 組件來(lái)提供和預訂 Web 服務(wù)。本文附帶的簡(jiǎn)單應用程序代碼將幫助您深入理解所有這些是如何工作的。

  使用此處所闡明的體系結構,您可以開(kāi)發(fā)出這樣的企業(yè)應用程序,它非常健壯,很容易維護,而且能很容易地與早期應用程序集成在一起。我希望您將可以開(kāi)發(fā)出更多的關(guān)于 Structs 和 Web 服務(wù)的項目,并看到這種體系結構在您自己的項目中是多么的有用。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
關(guān)于大型網(wǎng)站技術(shù)演進(jìn)的思考(十四)
使用AngularJS開(kāi)發(fā)我們下一款Web應用的七個(gè)理由
用struts framework開(kāi)發(fā)應用程序
MVC基礎、Model2的MVC和Struts2的MVC
MVC模式與struts框架
基于.NET的Web應用框架構建模式
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久