Web Service 教程

ja_rome發表於2015-11-15

一、webservice介紹  
 
   1.使用場景
   
      - 不同的移動客戶端訪問
      - 需要訪問第三方的專案 


   2.訪問第三方應用的方式
      ISO的七層模型  : 物理層、資料鏈路層、網路層、傳輸層、表示層、會話層、應用層
     - Socket訪問  : Socket屬於傳輸層,它是對Tcp/ip協議的實現,包含TCP/UDP,它是所有通訊協議
                       的基礎,Http協議需要Socket支援,以Socket作為基礎
        Socket通訊特點:
 1. 開啟埠,該通訊是 長連線的通訊 ,很容易被防火牆攔截,可以通過心跳機制
              來實現 ,開發難度片段
 2. 傳輸的資料一般是字串 ,可讀性不強
           lj|16|1|60|up  
          3. socket埠不便於推廣 
    http:17.23.23.2:2345   www.jd.com   www.360buy.com
 4. 效能相對於其他的通訊協議是最優的
     - Http協議訪問 :屬於應用層的協議,對Socket進行了封裝
          1. 跨平臺 
 2. 傳資料不夠友好 : 
    get請求: http://127.0.0.1:8888?username=lj&pwd=1234
 3. 對第三方應用提供的服務,希望對外暴露服務介面
   
     問題:
       1. 資料封裝不夠友好 :可以用xml封裝資料 
       2. 希望給第三方應用提供web方式的服務  (http + xml) = web  Service
          
     - Webservice
       1.webService介紹
         
       2.webservice的規則
         - xml 
- soap :(simple object access 協議) :簡單物件訪問協議
- wsdl : webservice描述語言 ,它也是xml實現的
       3.webservice的優點
         
       4.webservice專業名稱
         1. xml
         2. wsdl
3. soap 


二、呼叫第三方的WS服務


   1.體驗webservice    www.webxml.com.cn
     
   2.準備客戶端,呼叫第三方的webservice服務,讓本專案有手機查號的功能
     - 一般訪問方式  HttpClient
       1. Http-GET
       2. Http-Post 
       3. Soap (http+xml)
     問題:1. 如何解析結果
           2. 如何傳遞物件引數 


     - 推薦的訪問方式
          在jdk 1.6 版本以後 ,通過jax-ws 包提供對webservice的支援 
    - 該方式通過註解的方式來宣告webservice 
    - 通過 jdk EndPoint.publish()釋出webserive服務


   早期的版本 : jax-rpc (remote produce call)


  webservice 納入 w3c規範,其他的平臺都支援該規範 :JEE\Php\.NET
   都支援wsimport 方式 : 對遠端的webservice生成本地代理,再通過本地代理
                          來訪問webservice
        - wsimport 命令的位置: 
  C:\Program Files\Java\jdk1.7.0_04\bin
- 要求:
 1. jdk的 版本要在 jdk 1.6.21及以上 
 2. 作業系統安裝的jdk版本 與 MyEclispe 及 預設指定的版本要一致


- wsimport使用: 
 記得設定jdk\bin  環境變數  指定path 
           語法  wsimport [opations] <wsdl_uri>
    - wsdl_uri:wsdl 的統一資源識別符號
    - d  :指定要輸出的檔案的位置
    - s  :表示要解析java的原始碼 ,預設解析出的是class位元組碼 
    - p  : 指定輸出的包名
 
  
三、自定義及釋出一個webservice服務
    - 宣告 某個業務服務為webservice服務
       通過@webservice 註解來宣告
    - 釋出webservice服務
       Endpoint.publish()釋出
    - 通過wsimport生成本地代理來訪問自己釋出的webservice
       wsimport
      
     
四、webservice傳輸實體物件
  
五、練習:
 
 
   1. 呼叫教師機的ws服務
      步驟:
       1. 系統jdk環境與myeclipse jdk 環境一致  ,1.6.021以上  
       2. 知道服務端的WDSL路徑
           http://192.168.114.10:8888/ws/phoneService?WSDL
       3. 命令列 wsimport -s ./ -p  cn.itcast.ws.d http://192.168.114.10:8888/ws/phoneService?WSDL
       4. 匯入通過wsimport 解析的java類,再編寫一個main測試
                MoblieOsInfoService ws=new MoblieOsInfoService();
MoblieOsInfo phoneServicePort = ws.getMoblieOsInfoPort()
                 PhoneOs phone=phoneServicePort.getMobileOsInfo("android");



   2. 建立自己的ws服務併發布、呼叫
   步驟: 1.宣告webservice服務 (@webService)2. 釋出webservice(EndPoint.publish) 3. 客戶端訪問(wsimport)
      1. 建立一個要通過webservice對外發布的java bean : PhoneService
      2. 在java 的入口main方法 通過EndPoint 釋出一個服務端點
         String address1="http://192.168.19.10:8888/ws/phoneService";
         Endpoint.publish(address1, new PhoneService());
         System.out.println("adrress1的WSDL地址"+address1+"?WSDL");
  




六、WSDL檔案介紹 :webservice服務說明 




七、通過註解配置修改wsdl檔案, 讓它具有更好的可讀性 
   需求:
     1. 想改方法的輸入引數名、返回引數名
     2. 想改服務名,方法名
     3. 對該業務類的某些方法不想對外發布 
       -  預設只有public 修飾的方法會以webservice的形式對外發布 
而 private  受保護的,預設的,都不會發布
       - 某些public 方法也不想對外發布 


   實現:註解配置修改wsdl檔案
   
    


  重點:
    1. webservice 的作用、規則、優點
    2. 專業名詞
       wsdl 、 soap 、 xml
    3. wsimport 生成本地代理
    4. 通過JEE方式宣告與釋出webservice
       - 宣告 :@webservice
       - 釋出 :EndPoint
    5. WSDL檔案描述 
    6. 通過修改註解,配置wsdl檔案,增強可讀性 

相關文章