Web Service 初步瞭解

 Web Service見名之意就是網絡上的一些服務,解決的問題就是如何使用這些服務,由於軟件的開發有各類各樣的語言,利用JavaC#VB.NET,PHP等等,如何使這些語言編寫的程序可以進行互通,彼此相互利用。Web Service就能夠解決異構系統的通訊的整合。前端

 

           首先看一下,和WebService同樣可以解決異構系統的通訊和整合的方案吧:java

 

           1,經過XMLJSON,字符串進行多語言的通信,由於這些都是規定好的,各個語言中使用都是同樣的。例如JavaScriptJava經過Json進行數據交換,JavaScript利用eval()函數,而Javajackson,json-lib等類庫來進行幫忙解析。web

 

          2,共享數據庫,這種方式也能實現不一樣系統的通訊,可是對數據庫的保護方面可能不夠好。數據庫

 

          3,共享文件,能夠將文件(通常是xml文件)上傳到均可以訪問到地方(例如:FTP server上)進行共享。apache

 

          4,使用當心中間件,如圖:編程


 

 

          固然還有CORBAWeb Service比較成熟的技術等等,這些都是解決異構系統的通訊的宏觀方式。因爲不一樣的系統處於不一樣的JVM中,這就須要考慮分佈式架構的解決方案了,看一下核心圖吧,體現了代理模式,這裏還利用了JavaEEJNDI規範進行對象的查找等:json

 

 

           因爲Web Service的容易上手和傳輸的格式是xml文本格式(由於此能夠利用dtdSchema進行規範約束),因此使用比較普遍,下邊看一下Web Service的簡單應用吧。api

 

          Web Service技術獲得了Java的支持,在JDK6之後都給出了相關規範的實現,有兩種方式:瀏覽器

    1JAX-WS(XML web services的Java API)是SOAP方式即:簡單對象訪問協議(SimpleObject Access Protocol),它是用於交換XML標準通用標記語言下的一個子集)編碼信息的輕量級協議服務器

     2JAX-RS(Java API for RESTful Web Services )restful方式風格。

       

        再看一個概念: WSDL:WebService描述語言WSDL 就是用機器能閱讀的方式提供的一個正式描述文檔而基於XML標準通用標記語言下的一個子集)的語言,用於描述WebService及其函數、參數和返回值。由於是基於XML的,因此WSDL既是機器可閱讀的,又是人可閱讀的。 下邊是SOAP和WSDL在異步傳輸中的所用:

 

 

           這裏只看一下第一種SOAP方式,提供的框架技術有CXF,XFireAXIS。而經常使用的是AxisCXF,先看一下二者的比較吧:

 

    Axis互通訊比較好,對其餘語言訪問的兼容性比較多;

     CXF很是容易的整合到Spring架構中;

 

          看一下CXF如何集成到Spring進行開發服務端吧:

 

          1,加入jar包(夠用的原則):

    -cxf-2.5.10.jar

    -wsdl4j-1.6.3.jar

    -xmlschema-core-2.0.3.jar

    -neethi-3.0.2.jar

    -geronimo-servlet_2.5_spec-1.1.2.jar

    -woodstox-core-asl-4.2.0.jar

    -stax2-api-3.1.1.jar

 

           2 web.xml中,配置前端控制器CXFServlet攔截Web Service請求

<servlet>  
       <servlet-name>cxf</servlet-name>  
       <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>  
       <load-on-startup>1</load-on-startup>  
   </servlet>  
  
   <servlet-mapping>  
       <servlet-name>cxf</servlet-name>  
       <url-pattern>/services/*</url-pattern>  
 </servlet-mapping>  

 

 
           3,將CXF提供的缺省配置文件cxf.xml引入到Spring配置文件中

 

<import resource="classpath:META-INF/cxf/cxf.xml" />   

 

 

     4,基於CXF規範,採用JAX-WS方式開發北向接口,注意@WebService@WebParam註解的使用,還有就是實現類的編寫加的註解要指定名稱@Resource(name="userDaoImpl"),其它正常編寫便可:

 

@WebService  
public interface WebServiceFacade {  
  
    public String selectUser(@WebParam(name="userId")String userId);  
}  

 

           5,在配置文件中使用endpoint發佈WebService,這裏須要引入對應的命名空間和約束xsd

    -引入命名空間jaxws  xmlns:jaxws="http://cxf.apache.org/jaxws

    -加入jaxws命名使用的xsd

http://cxf.apache.org/jaxws 

http://cxf.apache.org/schemas/jaxws.xsd

<jaxws:endpoint   
  id="webServiceFacade"   
  implementor="#webServiceFacadeImpl" //引用IoC中的id   
  address="/WebServiceFacade" />  

 


           6,而後啓用服務器,採用瀏覽器就能夠進行訪問了:應用程序根services/WebServiceFacade?wsdl。固然這裏推薦一個測試服務接口的工具,很是好用的SoapUI。若是可以成功返回指定String,那麼服務端就成功了。咱們就能夠經過任何語言的系統,經過此URL爲接口訪問此服務接口了,固然也能夠使用生成的WSDL

     這樣服務段就建好了,可是咱們如何編寫客戶端Client進行調用呢?我用的Java語言,因此WSDL2Java方法這個就很是重要。使用eclipse自動的AXIS插件進行新建:就自動爲咱們生成客戶端的存根,咱們調用這些存根的方法便可完成對目標對象的調用。

 

 

          或者採用CXF中的wsdl2java.bat進行相關存根的生成,總而言之是利用工具給咱們生成存根,咱們調用便可。這樣,咱們就實現了不一樣語言不一樣程序之間的訪問通訊了。

 

          這也是繼面向對象編程思想又一種較新的編程思想面向服務編程,這樣咱們就不用顧慮語言的差異,提供規範的服務接口,咱們不管使用什麼語言,就均可以訪問使用了,大大提升了程序的複用率。

 

          例如,在咱們的程序中添加天氣預報,火車時刻表,利用銀行進行付帳,利用騰訊QQ,其餘郵箱帳號登錄系統等等,只要提供對應的服務接口咱們就能夠很容易的實現了,固然了,這裏有些接口就須要收費了,可是這種方式無疑大大擴展了程序的邊界,使複用性大大的提升了。算是一種改革吧!

 

       異步系統通訊,Web Service初步總結,還在深刻研究中……

相關文章
相關標籤/搜索