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

首頁 > 學院 > 開發設計 > 正文

使用SOAP開發Java Web服務詳解

2019-11-18 12:02:32
字體:
來源:轉載
供稿:網友

  本文的預定讀者首先要對j2ee有所了解,熟悉xml,tomcat等基本內容,本文主要是簡單介紹一下web服務的基本內容,怎樣在java web開發中構建SOAP服務:
  
  一、SOAP(Simple Object access PRotocol)簡單對象訪問協議
  要了解SOAP,首先就需要了解分布式計算的由來,隨著下一代的分布式計算體系web服務的出現,SOAP成為了創建和調用通過網絡發布的應用程序的實際通信標準。SOAP類似傳統的二進制協議IIOP(CORBA)和JRMP(RMI),但它不采用二進制數據表示法,而是采用使用XML的,基于文本的數據表示法。
  
  通過XML表示法,SOAP定義了一種小型有線連接協議和編碼格式,以表示數據類型、編程語言和數據庫,還可以使用各種Internet標準協議作為其消息傳輸工具,還可以提供表示RPC和文檔驅動的消息交換等通信模型的約定。請注重,W3C正致力于SOAP的研究,http://www.w3c.org/2000/XP/Group/ ,并得到了主流供給商的積極響應,以便對于基于XML的協議相關的重要任務達成共識,并定義其要害要求和使用場景。
  
  SOAP1.2的基本規范定義了以下基本內容:
  
  1)用于將XML文檔表示為結構化SOAP消息的語法和語義
  2)在SOAP消息中表示數據的編碼標準
  3)用于交換SOAP消息的通信模型
  4)SOAP傳輸等底層協議的綁定
  SOAP消息主要包括了信封頭,消息頭,主體,附件幾部分
  一個簡單的SOAP消息表示:
  POST  /StudentInfo  HTTP/1.1
  Host:anthropology.cun.edu
  Content-Type: text/xml;charset="utf-8"
  Content-Length: 640
  SOAPAction: "GetStudentInfo"
  
  <SOAP-ENV:Envelop xmlns:SOAP-ENV="http://www.w3c.org/2001/06/soap-envelope"
  xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3c.org/2001/XMLSchema"
  SOAP-ENV:encodingStyle="http://www.w3c.org/2001/06/soap-encoding">
  <SOAP-ENV:Header>
  <person:mail xmlns:person="http://www.cun.edu/Header">xyz@cun.edu
  </SOAP-ENV:Header>
  
  <SOAP-ENV:Body>
  <m:GetStudentInfo  xmlns:m="http://www.cun.edu/jws.student.studentInfo">
  <student_name xsi:type='xsd:string'>
  Wang wen yin
  </student>
  </m:GetStudentInfo>
  </SOAP-ENV:Body>
  </SOAP-ENV:Envelop>
  
  以上是1.2版本命名空間,1.1的命名空間 SOAP ENVELOPE:http://schemas.xmlsoap.org/soap/envelop/ ,SOAP ENCODING: http://schemas.xmlsoap.org/soap/encoding/
  
  關于SOAP編碼規范請參閱www.w3c.org/TR/xmlschema-2/ 定義的編碼值,其他的一些規范可以上www.w3c.org 上具體查看。
  
  二、以下從實際例子來學習
  這里我使用的是Apache的一個子項目Axis的具體例子,便于深入了解soap的運行:
  
  1)下載Axis的相關內容http://ws.apache.org/axis/:
  
  2)建立一個實例程序(遵守j2ee的web程序規范),如(WebServiceTest目錄)
  
  把axis中lib文件夾的內容拷到你的WebServiceTest/WEB-INF/lib下,同時上網下載xerces(下載地點:http://xml.apache.org/xerces-j/)解釋器的包文件xerces.jar,也拷到WebServiceTest/WEB-INF/lib文件夾下,(若要配置log4j,請把屬性文件log4j.properties拷到WebServiceTest/WEB-INF/classes文件夾下)
  
  3)修改應用程序WebServiceTest/WEB-INF中的web.xml文件:主要servlet設置如下
  <servlet>
  <servlet-name>TestServlet</servlet-name>
  <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>TestServlet</servlet-name>
  <url-pattern>*.jws</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
  <servlet-name>TestServlet</servlet-name>
  <url-pattern>/servlet/TestServlet</url-pattern>
  </servlet-mapping>
  
  <servlet-mapping>
  <servlet-name>TestServlet</servlet-name>
  <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  
  <servlet>
  <servlet-name>AdminServlet</servlet-name>
  <servlet-class>
  org.apache.axis.transport.http.AdminServlet
  </servlet-class>
  <load-on-startup>100</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  <servlet-name>AdminServlet</servlet-name>
  <url-pattern>/servlet/AdminServlet</url-pattern>
  </servlet-mapping>
  
  <mime-mapping>
  <extension>wsdl</extension>
  <mime-type>text/xml</mime-type>
  </mime-mapping>
  
  <mime-mapping>
  <extension>xsd</extension>
  <mime-type>text/xml</mime-type>
  </mime-mapping>
  
  你現在可以在網址里輸入http://localhost/WebServiceTest/servlet/TestServlet 看到了嗎?Axis是使用axis.jar包里的org.apache.axis.transport.http.AxisServlet對應用程序進行處理的,基本配置就講到這里。
  
  三、接著我們來說Axis中的內核
  1)不使用Tomcat引擎運行Axis。
  
  先建立一個腳步文件,對環境變量classpath進行設置要把lib下的那些包文件的路徑全都包括進去,運行:java org.apache.axis.transport.http.SimpleAxisServer <port>
  
  2)內部服務處理程序是org.apache.axis.providers.java.RPCProvider,標志出服務所需的方法,然后提供從SOAP請求消息組成部分的參數。
  
  3)Axis的應用程序端治理功能:
  
  java org.apache.axis.client.AdminClient 就會列出參數,可供你選擇。我們的例子是:java org.apache.axis.client.AdminClient -l http://localhost/WebserviceTest/servlet/TestServlet list 就會顯示出服務列表,返回的是xml文件
  4)wsdl2java應用程序可以把wsdl文件創建基于java的程序,如占位程序等
  java org.apache.axis.wsdl.WSDL2java <url>
  
  Axis的基本內容說到這里
  
  四、具體例子
  1)編寫邏輯程序,簡單如:SoapTest.java
  public class SoapTest{
  public String getStr(String name){
  return "Hello,"+name;
  }
  }
  2) 部署服務,編寫wsdd文件SoapTest_deploy.wsdd:
  <deployment name="SimapleTest" xmlns="http://xml.apache.org/axis/wsdd/"
  xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
  xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
  xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
  <service name="SoapTest" provider="java:RPC">
  <parameter name="className" value="SoapTest"/>
  <parameter name="allowedMethods" value="getStr"/>
  </service>
  </deployment>
  其中className參數是你的想部署的類名(全名),allowedMethods是調用的服務的方法,假如有多個方法的話可以用空格分開(如: <parameter name="allowedMethods" value="getStr getMoney"/>),當用*的時候表示全部。
  
  好了現在預備部署了,確保環境路徑classpath設置正確,運行:
  
  java org.apache.axis.client.AdminClient -l http://localhost/WebserviceTest/servlet/TestServlet SoapTest_deploy.wsdd
  
  (這里不懂的話,請參考以上的說明)
  
  ok,呵呵,至此,我們已經完成了一個web服務的部署:測試http://localhost/WebServiceTest/servlet/TestServlet 看里面是否多了一個選擇SoapTest服務?
  
  假如不想要服務了那重新編寫一個wsdd文件,內容改為:
  
  <deployment name="SimapleTest" xmlns="http://xml.apache.org/axis/wsdd/"
  xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
  xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
  xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
  <service name="SoapTest"/>
  </deployment>
  
  和上面一樣,對比一下就ok了。
  
  五、客戶端測試:
  客戶端我們也可以使用java來進行測試,網上也有資料的,你可以去學習,很簡單的。現在為了體現web服務的魅力,我用.NET平臺來測試吧,客戶端使用c#編寫(先要安裝.net framework sdk):
  
  1)通過wsdl生成web服務代理,在net平臺下運行:
  
  wsdl /l:CS /protocol:SOAP /out:SoapTestClient.cs http://localhost/WebserviceTest/services/SoapTest?wsdl
  
  我們通過wsdl得到了一個cs文件SoapTestClient.cs(當前目錄),你可以打開cs文件,研究一下里面的代碼,那個getStr(string name)就是我們需要調用的方法,我們的客戶端通過調用該方法就可以調用服務器端的方法,內部的轉化wsdl.exe工具已經幫我們完成了,axis下的WSDL2Java

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康平县| 大庆市| 东阿县| 涟水县| 博客| 门源| 牙克石市| 株洲市| 蒙阴县| 炉霍县| 普格县| 芜湖县| 达拉特旗| 长治市| 榆中县| 宜阳县| 垣曲县| 湘乡市| 济阳县| 乡宁县| 元江| 垫江县| 林芝县| 永济市| 永和县| 铁岭县| 偏关县| 磐石市| 长武县| 全南县| 宾川县| 永仁县| 南宁市| 黄石市| 濉溪县| 巍山| 南陵县| 青海省| 若尔盖县| 西盟| 宜川县|