<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    使用SOAP開發(fā)java web服務(wù)

    本文的預(yù)定讀者首先要對(duì)j2ee有所了解,熟悉xml,tomcat等基本內(nèi)容,本文主要是簡(jiǎn)單介紹一下web服務(wù)的基本內(nèi)容,怎樣在java web開發(fā)中構(gòu)建SOAP服務(wù):
    ?一、SOAP(Simple Object Access Protocol)簡(jiǎn)單對(duì)象訪問協(xié)議,要了解SOAP,首先就需要了解分布式計(jì)算的由來,隨著下一代的分布式計(jì)算體系web服務(wù)的出現(xiàn),SOAP成為了創(chuàng)建和調(diào)用通過網(wǎng)絡(luò)發(fā)布的應(yīng)用程序的實(shí)際通信標(biāo)準(zhǔn)。SOAP類似傳統(tǒng)的二進(jìn)制協(xié)議IIOP(CORBA)和JRMP(RMI),但它不采用二進(jìn)制數(shù)據(jù)表示法,而是采用使用XML的,基于文本的數(shù)據(jù)表示法。
    ??????? 通過XML表示法,SOAP定義了一種小型有線連接協(xié)議和編碼格式,以表示數(shù)據(jù)類型、編程語(yǔ)言和數(shù)據(jù)庫(kù),還可以使用各種Internet標(biāo)準(zhǔn)協(xié)議作為其消息傳輸工具,還可以提供表示RPC和文檔驅(qū)動(dòng)的消息交換等通信模型的約定。請(qǐng)注意,W3C正致力于SOAP的研究,http://www.w3c.org/2000/xp/Group/?,并得到了主流供應(yīng)商的積極響應(yīng),以便對(duì)于基于XML的協(xié)議相關(guān)的重要任務(wù)達(dá)成共識(shí),并定義其關(guān)鍵要求和使用場(chǎng)景。
    ??????? SOAP1.2的基本規(guī)范定義了以下基本內(nèi)容:
    ?????? 1)用于將XML文檔表示為結(jié)構(gòu)化SOAP消息的語(yǔ)法和語(yǔ)義
    ?????? 2)在SOAP消息中表示數(shù)據(jù)的編碼標(biāo)準(zhǔn)
    ?????? 3)用于交換SOAP消息的通信模型
    ???????4)SOAP傳輸?shù)鹊讓訁f(xié)議的綁定
    ????? SOAP消息主要包括了信封頭,消息頭,主體,附件幾部分
    ????? 一個(gè)簡(jiǎn)單的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/?
    ???關(guān)于SOAP編碼規(guī)范請(qǐng)參閱www.w3c.org/TR/xmlschema-2/?定義的編碼值,其他的一些規(guī)范可以上www.w3c.org 上具體查看。
    二、以下從實(shí)際例子來學(xué)習(xí),這里我使用的是Apache的一個(gè)子項(xiàng)目Axis的具體例子,便于深入了解soap的運(yùn)行:
    ??? 1)下載Axis的相關(guān)內(nèi)容http://ws.apache.org/axis/
    ????2)建立一個(gè)實(shí)例程序(遵守j2ee的web程序規(guī)范),如(WebServiceTest目錄)
    ????????? 把a(bǔ)xis中l(wèi)ib文件夾的內(nèi)容拷到你的WebServiceTest/WEB-INF/lib下,同時(shí)上網(wǎng)下載xerces(下載地點(diǎn):http://xml.apache.org/xerces-j/)解釋器的包文件xerces.jar,也拷到WebServiceTest/WEB-INF/lib文件夾下,(若要配置log4j,請(qǐng)把屬性文件log4j.properties拷到WebServiceTest/WEB-INF/classes文件夾下)
    ????3)修改應(yīng)用程序WebServiceTest/WEB-INF中的web.xml文件:主要servlet設(shè)置如下
    ???????<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>
    ??? 你現(xiàn)在可以在網(wǎng)址里輸入http://localhost/WebServiceTest/servlet/TestServlet?看到了嗎?Axis是使用axis.jar包里的org.apache.axis.transport.http.AxisServlet對(duì)應(yīng)用程序進(jìn)行處理的,基本配置就講到這里。
    三、接著我們來說Axis中的內(nèi)核。
    1)不使用Tomcat引擎運(yùn)行Axis。
    ?????? 先建立一個(gè)腳步文件,對(duì)環(huán)境變量classpath進(jìn)行設(shè)置要把lib下的那些包文件的路徑全都包括進(jìn)去,運(yùn)行:java??org.apache.axis.transport.http.SimpleAxisServer? <port>
    ?2)內(nèi)部服務(wù)處理程序是org.apache.axis.providers.java.RPCProvider,標(biāo)志出服務(wù)所需的方法,然后提供從SOAP請(qǐng)求消息組成部分的參數(shù)。
    ?3)Axis的應(yīng)用程序端管理功能:
    ?????? java? org.apache.axis.client.AdminClient?就會(huì)列出參數(shù),可供你選擇。我們的例子是:java? org.apache.axis.client.AdminClient? -l http://localhost/WebserviceTest/servlet/TestServlet? list 就會(huì)顯示出服務(wù)列表,返回的是xml文件
    4)wsdl2java應(yīng)用程序可以把wsdl文件創(chuàng)建基于java的程序,如占位程序等
    ???? java? org.apache.axis.wsdl.WSDL2java? <url>
    Axis的基本內(nèi)容說到這里
    四、具體例子
    ?1)編寫邏輯程序,簡(jiǎn)單如:SoapTest.java
    ????public class SoapTest{
    ????????public String getStr(String name){
    ????????????return "Hello,"+name;
    ????????}
    ????}
    ? 2)?部署服務(wù),編寫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參數(shù)是你的想部署的類名(全名),allowedMethods是調(diào)用的服務(wù)的方法,如果有多個(gè)方法的話可以用空格分開(如:?<parameter name="allowedMethods" value="getStr? getMoney"/>),當(dāng)用*的時(shí)候表示全部。
    ?????好了現(xiàn)在準(zhǔn)備部署了,確保環(huán)境路徑classpath設(shè)置正確,運(yùn)行:
    ????????java? org.apache.axis.client.AdminClient? -l? http://localhost/WebserviceTest/servlet/TestServlet? SoapTest_deploy.wsdd
    ?????(這里不懂的話,請(qǐng)參考以上的說明)?
    ?ok,呵呵,至此,我們已經(jīng)完成了一個(gè)web服務(wù)的部署:測(cè)試http://localhost/WebServiceTest/servlet/TestServlet? 看里面是否多了一個(gè)選擇SoapTest服務(wù)?
    ????? 如果不想要服務(wù)了那重新編寫一個(gè)wsdd文件,內(nèi)容改為:
    <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>
    和上面一樣,對(duì)比一下就ok了。
    五、客戶端測(cè)試:
    ???? 客戶端我們也可以使用java來進(jìn)行測(cè)試,網(wǎng)上也有資料的,你可以去學(xué)習(xí),很簡(jiǎn)單的。現(xiàn)在為了體現(xiàn)web服務(wù)的魅力,我用.NET平臺(tái)來測(cè)試吧,客戶端使用c#編寫(先要安裝.net framework sdk):
    ??? 1)通過wsdl生成web服務(wù)代理,在net平臺(tái)下運(yùn)行:
    ??????wsdl? /l:CS? /protocol:SOAP? /out:SoapTestClient.cs? http://localhost/WebserviceTest/services/SoapTest?wsdl??
    ??????? 我們通過wsdl得到了一個(gè)cs文件SoapTestClient.cs(當(dāng)前目錄),你可以打開cs文件,研究一下里面的代碼,那個(gè)getStr(string name)就是我們需要調(diào)用的方法,我們的客戶端通過調(diào)用該方法就可以調(diào)用服務(wù)器端的方法,內(nèi)部的轉(zhuǎn)化wsdl.exe工具已經(jīng)幫我們完成了,axis下的WSDL2Java工具也是一樣的功能,可以參考我上面所說的關(guān)于Axis的內(nèi)核內(nèi)容
    ???2)編譯cs文件成程序集dll:
    ????? csc /target:library /r:System.Web.Services.dll? /r:System.Xml.dll SoapTestClient.cs
    ????? 最后我們等到了一個(gè)dll文件SoapTestClient.dll,客戶端程序通過調(diào)用它就行了
    ???3)編寫客戶端應(yīng)用程序SoapTestClientApp.cs
    ????? using System;
    ??????
    ??????namespache? jws.client{
    ?????????public class SoapTestClientApp{
    ????????????public SoapTestClientApp(){
    ????????????}
    ????????????public static void?Main(string[] args){
    ????????????????if(args.Length!=1){
    ????????????????????Console.WriteLine("Usage:SoapTestClientApp <name>");
    ????????????????????Environment.Exit(1);
    ????????????????}
    ????????????????SoapTestService? st_service=new SoapTestService();
    ????????????????st_service.getStr("Wang wenyin");
    ???????????}
    ????????}?
    ?????}
    4)編譯文件csc? /r:SoapTestClient.dll? SoapTestClientApp.cs
    ????運(yùn)行SoapTestClientApp
    輸出結(jié)果:
    ?????Hello,Wang wenyin
    與預(yù)期結(jié)果相符。



    posted on 2006-06-09 15:51 nbt 閱讀(1246) 評(píng)論(0)  編輯  收藏 所屬分類: Web Services


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    <2006年6月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊(cè)

    收藏夾

    Java技術(shù)網(wǎng)站

    友情鏈接

    國(guó)內(nèi)一些開源網(wǎng)站

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 成全影视免费观看大全二| 亚洲综合区小说区激情区| 男男黄GAY片免费网站WWW| 曰韩亚洲av人人夜夜澡人人爽| 少妇人妻偷人精品免费视频| 亚洲日韩精品无码专区加勒比☆| 亚洲国产精品视频| 67pao强力打造高清免费| 99亚洲男女激情在线观看| 亚洲国产精品久久久久久| 日韩一级在线播放免费观看| 中国在线观看免费的www| 亚洲人成7777| 国产亚洲精品国看不卡| 毛片基地免费观看| 免费无码又爽又刺激一高潮| 亚洲国产av玩弄放荡人妇| 亚洲人成亚洲精品| 亚洲国产精品一区二区第四页| 久久久久久精品免费免费自慰| 本道天堂成在人线av无码免费| 亚洲AV无码一区二区三区人| 亚洲一区二区三区在线观看精品中文 | 亚洲精品无码99在线观看| 67194成手机免费观看| 一道本不卡免费视频| 33333在线亚洲| 亚洲av伊人久久综合密臀性色| 四虎在线播放免费永久视频| 亚洲天堂免费在线| 久久这里只精品热免费99| 黄色a三级三级三级免费看| 亚洲第一成人在线| 亚洲日韩区在线电影| 亚洲男人的天堂www| 内射无码专区久久亚洲| 在线免费观看中文字幕| 96免费精品视频在线观看| 特级做A爰片毛片免费看无码| 极品美女一级毛片免费| 亚洲精品第一综合99久久|