WebService,顧名思義就是基于Web的服務。它使用Web(HTTP)方式,接收和響應外部系統的某種請求,接下來通過本文給大家介紹WebService教程詳解,對webservice教程感興趣的朋友一起學習吧。
Web Services 可以將應用程序轉換為網絡應用程序。
通過使用 Web Services,您的應用程序可以向全世界發布信息,或提供某項功能。
Web Services 可以被其他應用程序使用。
通過 Web Services,您的會計部門的 Win 2k 服務器可以與 IT 供應商的 UNIX 服務器相連接。
基本的 Web Services 平臺是 XML+HTTP。
Web services 使用 XML 來編解碼數據,并使用 SOAP 來傳輸數據。
什么是webService
WebService,顧名思義就是基于Web的服務。它使用Web(HTTP)方式,接收和響應外部系統的某種請求。從而實現遠程調用.
1:從WebService的工作模式上理解的話,它跟普通的Web程序(比如ASP、JSP等)并沒有本質的區別,都是基于HTTP傳輸協議的程序。?
2:WebService所使用的數據均是基于XML格式的。目前標準的WebService在數據格式上主要采用SOAP協議。SOAP協議實際上就是一種基于XML編碼規范的文本協議。
webService的技術支持
Web Service平臺需要一套協議來實現分布式應用程序的創建。任何平臺都有它的數據表示方法和類型系統。要實現互操作性,Web Service平臺必須提供一套標準的類型系統,用于溝通不同平臺、編程語言和組件模型中的不同類型系統。目前這些協議有:
XML和XSD
可擴展的標記語言XML 是Web Service平臺中表示數據的基本格式。除了易于建立和易于分析外,XML主要的優點在于它既與平臺無關,又與廠商無關。XML是由萬維網協會(W3C)創建,W3C制定的XML SchemaXSD 定義了一套標準的數據類型,并給出了一種語言來擴展這套數據類型。
Web Service平臺是用XSD來作為數據類型系統的。當你用某種語言如VB. NET或C# 來構造一個Web Service時,為了符合Web Service標準,所有你使用的數據類型都必須被轉換為XSD類型。如想讓它使用在不同平臺和不同軟件的不同組織間傳遞,還需要用某種東西將它包裝起來。這種東西就是一種協議,如 SOAP。
SOAP
SOAP即簡單對象訪問協議(Simple Object Access Protocal),它是用于交換XML編碼信息的輕量級協議。它有三個主要方面:XML-envelope為描述信息內容和如何處理內容定義了框架,將程序對象編碼成為XML對象的規則,執行遠程過程調用(RPC)的約定。SOAP可以運行在任何其他傳輸協議上。例如,你可以使用 SMTP,即因特網電子郵件協議來傳遞SOAP消息,這可是很有誘惑力的。在傳輸層之間的頭是不同的,但XML有效負載保持相同。
Web Service 希望實現不同的系統之間能夠用“軟件-軟件對話”的方式相互調用,打破了軟件應用、網站和各種設備之間的格格不入的狀態,實現“基于Web無縫集成”的目標。
WSDL
Web Service描述語言WSDL 就是用機器能閱讀的方式提供的一個正式描述文檔而基于XML的語言,用于描述Web Service及其函數、參數和返回值。因為是基于XML的,所以WSDL既是機器可閱讀的,又是人可閱讀的。
UDDI
UDDI 的目的是為電子商務建立標準;UDDI是一套基于Web的、分布式的、為Web Service提供的、信息注冊中心的實現標準規范,同時也包含一組使企業能將自身提供的Web Service注冊,以使別的企業能夠發現的訪問協議的實現標準。 調用RPC與消息傳遞
Web Service本身其實是在實現應用程序間的通信。我們現在有兩種應用程序通信的方法:RPC遠程過程調用 和消息傳遞。使用RPC的時候,客戶端的概念是調用服務器上的遠程過程,通常方式為實例化一個遠程對象并調用其方法和屬性。RPC系統試圖達到一種位置上的透明性:服務器暴露出遠程對象的接口,而客戶端就好像在本地使用的這些對象的接口一樣,這樣就隱藏了底層的信息,客戶端也就根本不需要知道對象是在哪臺機器上。
如何發布一個WebService?
1、用Jdk1.6.0_21以后的版本發布一個WebService服務.并通過地址欄查看它的wsdl文檔.?
2、通過wsimport生成客戶端代碼,調用并查看運行的結果.(學會如何調用是我們的重點).
需要注意的是,jdk1.6._07以后jdk版本發布WebService時必須要完整的對代碼進行注解,如果使用的是jdk1.6.0_21以后版本,因為它已經內含了ws2.1所以,可以只對類添加@WebService的注解.?
以下是兩段不同的代碼:
在jdk1.6.0_13的版本上發布的ws:
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package com.itcast; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; import javax.xml.ws.Endpoint; @WebService (targetNamespace= "http://loalhost:9999/helloworld" ) @SOAPBinding (style=Style.RPC) //只支持RPC的消息風格 public class HelloWorld { //以下通過@WebMethod注解,對外公開方法 @WebMethod public String sayHello(){ return "HelloWorld" ; } public static void main(String[] args) { Endpoint.publish( "http://localhost:9999/helloworld" , new HelloWorld()); } } |
2:以下是在jdk1.6.0_24上發布的WebService代碼:?
1 2 3 4 5 6 7 8 9 10 11 12 | package com.itcast; import javax.jws.WebService; import javax.xml.ws.Endpoint; @WebService //注意只有此一個注解,此注解也是必須的,默認的SOAP消息風格為:DOCUMENT public class HelloWorld { public String sayHello(){ return "HelloWorld" ; } public static void main(String[] args) { Endpoint.publish( "http://localhost:9999/helloworld" , new HelloWorld()); } } |
第一個WebService服務?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package com.itcast; import javax.jws.WebService; import javax.xml.ws.Endpoint; /** * 第一個WebService服務應用 */ //通過注解,標明此類發布為一個WebService @WebService public class HelloWorld { public String sayHello(){ return "Hello World" ; } //在main方法中,使用javax.xml.ws.Endpoint端點發布一個應用 public static void main(String[] args) { Endpoint.publish( "http://127.0.0.1:9999/helloworld" , new HelloWorld()); } } |
代碼說明:HelloWorld類的所有非靜態公開方法將對外部暴露.
Wsimport工具說明:
? wsimport是jdk自帶的,可以根據wsdl文檔生成客戶端調用代碼的工具.當然,無論服務器端的WebService是用什么語言寫的,都將在客戶端生成Java代碼.服務器端用什么寫的并不重要.?
? wsimport.exe位于JAVA_HOME\bin目錄下.?
??常用參數為:?
? -d<目錄> - 將生成.class文件。默認參數。?
? -s<目錄> - 將生成.java文件。?
? -p<生成的新包名> -將生成的類,放于指定的包下。
(wsdlurl) - http://server:port/service?wsdl,必須的參數?
使用:?
1:可以通過java –version檢查你當前的版本號.如果版本太低可以安裝高版本的jdk.?
或直接將別人已安裝好的jdk目錄拷貝到你的機器如D:\jdk1.6.0_24目錄下.?
因為以前的環境變量已經設置成以前老版本的jdk目錄,即JAVA_HOME和PATH兩個環境變量.?
可以再重新設置一下環境變量為:JAVA_HOME=D:\jdk1.6.0_24,path=%JAVA_HOME%\bin,?
重新設置了環境變量后,要重新打開一個doc(命令行)窗口.才生效.?
如果不想修改原來已經配置好的環境變量,可以命令行窗口輸入以下命令,使jdk1.6.0_24生效:?
set path = D:\jdk1.6.0_24\bin;%PATH%(回車即可)?
再通過java –version查看jdk的版本號是否已經發生變化.?
2:轉到一個相對干凈的目錄下,我在d盤上新建立一個目錄名為:ws,并轉到此目錄下.?
3:開啟你的webService.?
4:輸入以下命令:?
wsimport –s . http://127.0.0.1:9999/helloworld?wsdl?
參數說明:-s是指編譯出源代碼文件,后面的.(點)指將代碼放到當前目錄下.?
最后面的http….是指獲取wsdl說明書的地址.?
5:此時,將生成.java文件和.class文件.(都包含原始包名).將代碼Copy到你的項目中.(只拷貝java文件)?
6:在新的項目中,新一個類,(可位于任意包下),對上面生成的代碼進行調用,見下一頁ppt.?
7:wsimport其他參數說明,我們經常使用的參數為-d,-s,-p?
-d<目錄>將會生成.class文件.?
示例:wsimport –d . http://127.0.0.1:9999/helloworld?wsdl?
-s<目錄>將會生成.java文件.?
示例:wsimport –s . http://127.0.0.1:9999/helloworld?wsdl?
-p<包名>將生成的文件(.java或是.class修改成指定的包名)?
示例:wsimport -s . -p com.beijing.itcast http://127.0.0.1:9999/helloworld?wsdl?
對于-p參數,注意包名的修改,它將所生成類,全部置于通過-p指定的包下.(演示)?
需要說明的是,當僅使用-p參數時,它也將同時使用-d即編譯成.class文件. –d參數寫或不寫,它都在那里,不離不棄.
RunMain.java的源代碼如下:
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package com.leaf; import com.itcast.HelloWorld; import com.itcast.HelloWorldService; /** * 通過調用生成的類,來調用遠程代碼 */ public class RunMain { public static void main(String[] args) { //從HelloWorldSerice的getHelloWorldPort方法中返回調用接口 HelloWorld helloWorld = new HelloWorldService().getHelloWorldPort(); String str = helloWorld.sayHello(); //執行調用 System.err.println(str); //返回HelloWorld字符串 } } |
WebService與普通Web程序的區別
1、 WebService只采用HTTP POST方式傳輸數據,不使用GET方式;
1) Tttp post的contentType為
(1)application/x-www-form-urlencoded
2) WebService的contentType為
(2) Text/xml soap1.1?
(3) application/soap+xml –soap1.2
2、WebService從數據傳輸格式上作了限定。
WebService所使用的數據均是基于XML格式的。目前標準的WebService在數據格式上主要采用SOAP協議。SOAP協議實際上就是一種基于XML編碼規范的文本協議。?
WebService和web服務器的區別:
我們可以把WebService看作是Web服務器上應用;反過來說,Web服務器是WebService運行時所必需的容器。這就是它們的區別和聯系。?
WebService的特點:
1、 WebService通過HTTP POST方式接受客戶的請求?
2、 WebService與客戶端之間一般使用SOAP協議傳輸XML數據.?
3、它本身就是為了跨平臺或跨語言而設計的。
使用工具的原因:
1、 使用工具可以更好的了解WebService請求的過程?
2、 使用工具WsExplore可以獲取SOAP數據發送和接收的格式?
3、 使用工具Tcp/Ip Monitor可以監控攔截器請求頭和響應頭的具體數據
什么是SOAP?
SOAP是一種基于XML編碼規范的文本協議,簡單的說SOAP就是在HTTP的基礎上傳輸XML數據,以實現遠程調用【無論你的服務端是什么語言書寫的,只要接收SOAP協議的XML數據,并返回SOAP協議的XML數據,就可以被任何語言調用】?
使用WsExplorer實例:驗證qq是否在線?
采用qqOnlineWebServiceSoap中的qqCheckOnLine驗證時,返回的是?
qqCheckOnlineResponse?
qqCheckOnlineResult (string): N?
點擊source可以看到詳細信息,信息如下:?
1:這是發出的消息格式:?
復制代碼?代碼如下:
2:以下是接收到的XML格式?
復制代碼?代碼如下:
采用qqOnlineWebServiceHttpGet或qqOnlineWebServiceHttpPost中的qqCheckOnline驗證時,返回的都是?
Nhttp://WebXml.com.cn/">N>?
使用Tcp/Ip Monitor?
TCP/IP Monitor不僅可以看到SOAP數據,還可以獲取HTTP請求和接收的頭信息。?
1、位置:此工具位于:window>show view>other>MyEclipse Common(常用工具)>TCP/IP Monitor?
2、此工具,相當于一個代理商,啟動后它將監聽本地的某個端口,然后再將請求轉發給指定的目標IP和端口。?
獲取到數據后,再將數據原封不動的返回給客戶。在客戶看來,永遠首先訪問的都應該是這個代理,否則我們將看不到數據傳輸的過程。?
3、 配置選項:
在打開的TCP/IP Monitor界面上:view Menu(右上方向下的小箭頭)>Properties>Add(右側添加)?
設置成以下屬性:
第一步:
1)local monitoring port(監聽本地的端口號):9876,隨意設置一個4位的端口號,一會將通過http://127.0.0.1:9876的形式訪問?
2)host name(要監聽的服務器,如www.jb51.net):127.0.0.1 –因為本機發布了一個WebService所以監聽本機IP.也可以是任意的主機。?
3)Port(要監聽的目標服務器的端口):6666 - 因為我們發布的WebService為http://127.0.0.1:6666/helloworld所以,6666是需要監聽的端口號。?
4)Type(監聽的類型):?
-- TCP/IP : 將使用原始地址繼續訪問下一個請求,如用戶輸入:http://127.0.0.1:9876/helloworld?wsdl此時將返回wsdl服務訪問地址同前。?
-- HTTP :將使用目標地址繼續訪問下一個請求。如用戶輸入: http://127.0.0.1:9876/helloworld?wsdl在請求方法時將使用http://127.0.0.1:6666/helloworld來訪問sayHi方法。此種方式將不再會被代理。因為已經不是正在監聽的端口號了。?
在監聽類型處,我選擇了TCP/IP,然后通過在地址欄輸入:http://127.0.0.1:9876/helloworld?wsdl,在返回的wsdl文件中查看:處地址的變化情況。?
time out:設置訪問不成功的連接時間,保持為0,即不設置。?
在設置好后,點OK按扭,然后再點右方的Start按扭,監聽便已經啟動。?
第二步:
在MyEclipse的WebService上配置WSDL URL為:http://127.0.0.1:9876/helloworld?wsdl,注意使用的是MyEclipse TCP/IP Monitor的端口。而不是直接去訪問我們發布的http://127.0.0.1:6666/helloworld?wsdl?
如何修改wsdl文件的內容??
使用WebService的注解。?
1、 @WebService-定義服務?
2、 @WebMethod-定義方法?
3、 @WebResult-定義返回值?
4、@WebParam-定義參數?
注意:對于注解,不同的版本支持程度不相同:
1、1.5不支持.?
2、1.6.0_20前版本必須使用完整注解.?
3、1.6.0_21以后可以只使用@WebService對類進行注解.?
注釋的作用:
通過WebService的注解,可以更加形像的描述Web服務。從而生成WSDL文檔。?
當修改了WebService注解之后,同時會影響客戶端生成的代碼。?
調用的方法名和參數名也發生了變化。?
示例:
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | @WebService (name= "myName" , //對應portType name="myName" portName= "myPort" , //對應服務中的port name="myPort" serviceName= "myService" , //對應service name="myService" targetNamespace= "http://leaf.com/mynamespace" )//可以隨意書寫類似于java中的 package public class HelloWorld{ private static SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); @WebMethod (action= "myAction" , //定義一個soapAction="myAction"用于找到這個方法以執行 operationName= "myOperationName" ) //定義可以調用的方法,會生成相應類的具體方法,operation name=".." public @WebResult (name= "mySayHelloResult" )String //定義返回值的名稱 sayHello(){ return "HelloWorld" ; } @WebMethod (action= "mySayHiAction" ,operationName= "mySayHiOperationName" ) public @WebResult (name= "mySayHiResult" )String sayHi( @WebParam (name= "myParaName" , //將參數放到頭信息中,用于保護參數,默認在body中 header= true , mode=Mode.IN) String name){ String str = "你好:" +name+ ",當前時間是:" +sdf.format( new Date()); return str; } public static void main(String[] args) { Endpoint.publish( "http://127.0.0.1:6666/helloworld" , new HelloWorld()); } } |
3:將上面的程序對外發布以后,我們通過MyEclipse的WebService Explorer來訪問
你會發現和以前不一樣的提示信息,但其實,仍然還是調用的那同一個方法。
4:再次使用wsimport –s . http://127.0.0.1:6666/helloworld?wsdl生成java代碼然后調用?
以下是調用代碼(可以用面目全非來形容,但完成的還是同樣的工作。)
1 2 3 4 5 6 7 8 9 10 | package com.leaf.mynamespace; public class Main { public static void main(String[] args) { //通過分析wsdl可知從myService中調用getMyPort返回myName MyName myName = new MyService().getMyPort(); //通過myName的mySayHiOperationName來調用sayHi方法 String str = myName.mySayHiOperationName( "王健" ); System.err.println(str); } } |
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
echo off是什么語言?Echo off不是語言,是Dos命令行,意思是關閉Echo。bat批處理腳本中經常使用Echo。該命令的功能是顯示信息或回應命令開或關。簡單地說,有兩種用途,:。第一種用法是直接輸出字符串,比如在DOS終端輸入echo 123456,執行回車后,終端屏幕上會顯示字符串123456。該函數通常用于提示用戶或調試腳本。第二種用法是關閉后續命令的回顯。比如在DOS終端輸入命...
星號密碼顯示器?當我們輸入密碼時,它正在竊取代碼,特別是在互聯網上,它會自動變為星號,對嗎?星號密碼查看器是用來查看這些內容的。我告訴你如何使用XP的XP星號密碼查看器。單擊“開始檢測”后,我將指針指向adept。如果密碼框將顯示星號所代表的,我看不到空白等待密碼。此外,“網絡連接”對話框中的“請單擊此處更改密碼”不起作用。要查看密碼,需要ADSL密碼查看器。C語言加密碼變成星號?#包括和限制。H...
表格插入圖片不能浮于文字下方?在Excel中,您可以 不要把圖片放在文字的底部,只能用插入-背景的方法。如下所示:1.打開EXCexcel中文本標注框怎么翻轉?Excel單元格中的文字是反轉的,可以通過使用文本框,旋轉180度來實現。具體步驟如下:1.打開要操作的EXCEL表格,在插入工具欄中找到,點擊 "文本框和。2.在表格中畫一個大小合適的文本框,輸入需要反轉的文本內容,然后點擊文本框上方的綠...