webService詳解

什么是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:?
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代碼:?
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服務?
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的源代碼如下:?
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、它本身就是為了跨平臺或跨語言而設計的。

轉載于:https://www.cnblogs.com/wjwen/p/3838260.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260252.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260252.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260252.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

讀《有人負責,才有質量:寫給在集市中迷失的一代》總結與感想

在大伙都在吹捧“市集”開發軟件的方式的大浪潮下&#xff0c;作者看到了其中的不當之處&#xff0c;發現其中有許多的問題&#xff0c;因此寫下這篇文章給予吹捧“市集”的人一個提醒&#xff0c;甚至警告。 在該文章里&#xff0c;作者認為“市集”里的“農民”不可能建造出和…

php 判斷是否文件,利用PHP判斷文件是否為圖片的方法總結

前言在網頁設計中&#xff0c;如果需要圖片&#xff0c;我們通常拿到的是一個圖片的文件名。僅僅通過文件名是無法判斷該文件是否是一個圖片文件的。或許有的人以為通過后綴名就可以判斷&#xff0c;別忘了文件的后綴名是可以隨便改動的。更何況&#xff0c;在 Linux 系統下是不…

textedit怎么插入數據_還在手動插入Excel交叉空白行?這個小技巧10秒搞定

導讀&#xff1a;前幾天有同學在后臺提問&#xff0c;怎么快速在Excel中隔行插入一行或者多行空白行&#xff0c;其實在早期我們分享的小視頻中有利用過類似的小技巧來制作工資條&#xff0c;今天我們用它來插入空白行。文/ 芒種學院指北針Hello&#xff0c;大家好&#xff0c;…

python制作安裝包(setup.py)

1.制作setup.py from distutils.core import setupsetup(nameMyblog,version1.0,descriptionMy Blog Distribution Utilities,authorlujianxing,author_emaillujianxinglujianxing.com,urlhttp://blog.lujianxing.com,py_modules[foo] ) py_modules 定義 需要打包的模塊名 2.創…

[Ruby]$: 是什么意思?

ruby comes with a set of predefined variables$: default search path (array of paths)其他Ruby特殊變量&#xff1a; $! 最近一次的錯誤信息 $ 錯誤產生的位置 $_ gets最近讀的字符串 $. 解釋器最近讀的行數(line number) $& 最近一次與正則表達式匹配的字符串 $~ 作為…

rocketmq 啟動_016【windows版Rocketmq】小白學習Rocketmq單機部署

以前都是聽說MQ&#xff0c;或者在別人搭建好的基礎上去使用&#xff0c;沒有自己動手搭建過&#xff0c;就沒有更深入去理解。現在機會來啦.啦啦.啦啦啦......引用自己的CSDN文章href"https://blog.csdn.net/chenzhong2010/article/details/106699590或點擊左下角“閱讀原…

WPF WebBrowser 加載 html ,出現安全警告, 運行 腳本和 activeX 控件,

對于你的問題&#xff0c;只需要在你的HTML首行添加如下代碼即可隱藏安全提示條&#xff1a; <!-- saved from url(0014)about:internet --> 還有一個可選方案是使用Winform的WebBrowser控件&#xff0c;不需要更改HTML代碼&#xff0c;也不會出現安全提示&#xff0c;需…

資料下載資源網站

腳本之家&#xff1a;www.jb51.net 轉載于:https://www.cnblogs.com/dreammyle/p/3850250.html

php異步處理下載文件,異步處理Excel文件導入【流程圖+PHP示例】

面向管理后臺的系統中&#xff0c;經常會有文件導入的需求。常規的做法就是同步等待&#xff0c;但在業務關系復雜(多表數據校驗)、數據量較大的情況下&#xff0c;管理人員只能等結果&#xff0c;也可能會等到超時。使用異步的話&#xff0c;將導入數據的功能與后端接口解耦&a…

tcp client.cs

public class stateobject { public socket worksocket null; public const int Buffer_Size2048; public byte[] buffer new byte[Buffer_size]; public stringbuilder sb new stringbuilder(); } 轉載于:https://www.cnblogs.com/neumik/archive/2012/11/15/2771024.ht…

[python] 之 常用內建函數

本博客僅列舉了一些常用的內建函數&#xff0c;歡迎大家補充&#xff01; 1. dir([obj]) 顯示對象的屬性&#xff0c;若果沒有提供參數&#xff0c;則顯示全局變量的名字 2. help([obj]) 以一種整齊美觀的方式&#xff0c;顯示對象的文檔字符串&#xff1b;如果沒有提供任何參數…

python查詢模塊所有類_python 小技巧(import模塊、查詢類繼承關系、安裝包)

作者&#xff1a;Vamei 出處&#xff1a;http://www.cnblogs.com/vamei 歡迎轉載&#xff0c;也請保留這段聲明。謝謝&#xff01;在這里列舉一些我使用Python時積累的小技巧。這些技巧是我在使用Python過程中經常使用的。之前很零碎的記在筆記本中&#xff0c;現在整理出來&am…

4.2 access函數實例

int access(const char *filenpath, int mode); 功 能: 確定文件或文件夾的訪問權限。 mode&#xff0c;要判斷的模式在頭文件unistd.h中的預定義如下&#xff1a;#define R_OK 4 /* Test for read permission. */#define W_OK 2 /* Test for write permission. */#define X_OK…

php 簡易 blog,PHP實現簡易blog的制作

最近&#xff0c;有時間看了點PHP的代碼。參考PHP100教程做了簡單的blog&#xff0c;這里面簡單的記錄一下。首先是集成環境&#xff0c;這里選用的WAMP&#xff1a;http://www.wampserver.com/en/首先通過&#xff0c;phpMyAdmin創建一張blog表。純界面操作&#xff0c;過程比…

jquery 事件對象屬性小結

jquery 事件對象屬性小結 使用事件自然少不了事件對象. 因為不同瀏覽器之間事件對象的獲取, 以及事件對象的屬性都有差異, 導致我們很難跨瀏覽器使用事件對象. jQuery中統一了事件對象, 當綁定事件處理函數時, 會將jQuery格式化后的事件對象作為唯一參數傳入: $("#testDiv…

ABP文檔 - Mvc 視圖

文檔目錄 本節內容&#xff1a; 簡介AbpWebViewPage 基類簡介 ABP通過nuget包Abp.Web.Mvc集成到Mvc視圖里&#xff0c;你可以像往常那樣創建常規的視圖。 AbpWebViewPage 基類 ABP也提供了AbpWebViewPage&#xff0c;它定義了一些有用的屬性和方法&#xff0c;如果你使用啟動模…

ThinkPad L440 FN鍵設置

剛入手了ThinkPad L440&#xff0c;用起來相當不錯&#xff0c;嘿嘿&#xff01; L440系統默認&#xff08;F1-F12&#xff09;鍵盤為系統默認功能鍵&#xff0c;主要控制音量、亮度、連接投影儀等。 因為編寫程序需要調試&#xff0c;經常用到F10&#xff0c;F11等鍵&#xff…

離散數學反對稱關系_《離散數學》學習記錄 - 集合論

來源&#xff1a;北京大學《離散數學》公開課地址&#xff1a;https://www.bilibili.com/video/av18896337/?p122.1 有序對和卡氏積有序對<a,b>&#xff1a;有順序&#xff0c;類似于數組&#xff0c;可以用集合定義。性質&#xff1a;有序對內元素對應相等卡氏積AB&…

收集的博客列表

前端&#xff1a; ———————————————————— 宅居 - 裸: http://otakustay.com/ 轉載于:https://www.cnblogs.com/ccdc/archive/2012/11/21/2780879.html

php創建表并插入數據,php數據庫操作-創建庫和表以及插入數據

以上我們正確連接到了mysql數據庫&#xff0c;本文將進一步創建數據庫&#xff0c;表&#xff0c;在表中填充數據。大家知道連接上數據庫才能進行操作&#xff0c;同樣的代碼搬過來/** 數據庫操作*(創建數據庫&#xff0c;表&#xff0c;插入數據&#xff0c;插入多條數據)** T…