什麼是webservice?java
從架構師的角度來理解:webservice是一個軟件系統,爲了支持跨網絡的機器間相互操做交互而設計。Web Service服務一般被定義爲一組模塊化的API,它們能夠經過網絡進行調用,來執行遠程系統的請求服務。程序員
從一個程序員的視角來理解:在傳統的程序編碼中,存在這各類的函數方法調用。一般,咱們知道一個程序模塊M中的方法A,向其發出調用請求,並傳入A方法須要的參數P,方法A執行完畢後,返回處理結果R。這種函數或方法調用一般發生在同一臺機器上的同一程序語言環境下。如今的咱們須要一種可以在不一樣計算機間的不一樣語言編寫的應用程序系統中,經過網絡通信實現函數和方法調用的能力,而Web service正是應這種需求而誕生的。web
簡單來講,webservice就是一個網絡組件,一個能夠經過網絡訪問的程序。apache
Webservice、WSDL、SOAP的關係
Web Service = SOAP + HTTP + WSDL。其中,SOAP Simple Object Access Protocol)協議是web service的主體,它經過HTTP或者SMTP等應用層協議進行通信,自身使用XML文件來描述程序的函數方法和參數信息,從而完成不一樣主機的異構系統間的計算服務處理。這裏的WSDL(Web Services Description Language)web服務描述語言也是一個XML文檔,它經過HTTP向公衆發佈,公告客戶端程序關於某個具體的Web service服務的URL信息、方法的命名,參數,返回值等。瀏覽器
Webservice服務器端工做流程tomcat
1 監聽網絡端口(監聽服務端口)服務器
2接收客戶端請求(接收SOAP請求)網絡
3 解析客戶端請求(解析SOAP消息,將SOAP消息轉換爲數據對象)架構
4 調用業務邏輯(調用Web Service實現類的特定操做,參數是由SOAP消息轉換而來的數據對象)app
5 生成響應(將返回值轉換爲SOAP消息)
6 返回響應(返回SOAP響應)
Webservice客戶端工做流程
1 構造SOAP請求消息(將本地數據對象轉換爲SOAP消息)
2 發送SOAP消息到Web Service服務器的指定端口
3接收SOAP響應消息
4將SOAP響應消息轉換爲本地數據對象
以上知識點參考了互聯網上的相關信息以幫助理解開發原理,讀者想要詳細學習wsdl和soap的話,可到w3cschool網站查閱相關資料。下面介紹怎麼使用AXIS+Eclipse開發webservice。
Eclipse JEE Ganymede是eclipse的一個發行版本,集成了J2EE開發過程當中的經常使用工具插件,包括咱們在webservice開發中用到的axis,axis是一個soap引擎,是一個提供建立服務器端、客戶端和SOAP操做的基本框架,由apache基金會開發維護。Ganymede下載地址http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/ganymedesr2。
固然,正常使用eclipse的前提是你正確安裝了JDK,設置了JAVA_HOME、CLASSPATH等相關環境變量,這裏就不贅述了。
webservice服務器端開發
首先創建一個Dynamic Web Project。這裏我取名爲WebserviceTest。
新建一個java類,在類裏定義相關的方法供webservice使用。以前我看過一篇利用MyEclipse6.5開發基於JAX-WS的Webservice的文章,這裏引用它用到的Calculator例子。
ws.Calculator.java:
packagews;
publicclassCalculator{
publicintadd(inta,intb) {
return(a + b);
publicintsubtract(inta,intb) {
return(a - b);
publicintmultiply(inta,intb) {
return(a * b);
publicintdivide(inta,intb) {
return(a / b);
選中工程WebserviceTest,依次點擊file-new-other,打卡New Wizard窗口,選擇Web Services-Web Service。
點擊next,點擊service implementation項中的browse按鈕,選擇剛剛建立的Calculator.java類,注意Configuration信息中ServiceProject是否是剛剛咱們選中的WebserivceTest工程,不然要取消重來;選中Publish the web service複選框。其餘配置保持默認,點擊finish。
若是建立成功,能夠看到生成了相關的wsdl和wsdd文件。Wsdl文件對外描述本webservice的相關信息,外部系統能夠經過該文件創建客戶端來調用該文件對應的webservice。Wsdd文件則是webservice的部署配置文件。
打開web.xml能夠看到多瞭如下一個servlet及其映射:
<servlet>
<display-name>Apache-AxisServlet</display-name>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet>
<display-name>AxisAdminServlet</display-name>
<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>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
打開Calculator.wsdl,找到service結點,咱們發現訪問這個webservice的地址是http://localhost:8080/WebserviceTest/services/Calculator。
把工程WebserivceTest部署到tomcat,啓動tomcat,在瀏覽器地址欄敲入http://localhost:8080/WebserviceTest/services/Calculator?wsdl,若是能夠看到返回的wsdl文件,就說明webservice已經在工做了。
在不創建客戶端的狀況下,咱們也能夠經過eclipse內置的webservice explorer來對webservice進行調用測試。
把eclipse切換到Java EE perspective,點擊工具欄頂部的按鈕,以下圖,啓動webservice explorer。
在出現的webservice explorer頁面中,點擊右上角的WSDL Page按鈕,調出WSDL頁面,在WSDL URL輸入框中輸入webservice所在的URL,如:http://localhost:8080/WebserviceTest/services/Calculator?wsdl,點擊go。
這樣咱們能夠看到在webservice中提供給外界調用的全部方法。選擇subtract,輸入參數a爲7,b爲3,點擊go,能夠發如今status欄下返回了正確的結果4.
webservice客戶端開發
使用axis+eclipse能夠根據webservice提供的wsdl文件方便地生成客戶端代碼。
新建一個普通的java project,這裏我命名爲WebserviceClientTest。選中剛剛新建的工程,依次點擊file-new-other,打卡New Wizard窗口,選擇Web Services-Web Service Client,點擊next,在Web Service Client窗口中爲Service Definition選項瀏覽選擇剛剛咱們在服務端開發中生成的wsdl文件Calculator.wsdl,直接finish。
能夠看到一共生成了5個java文件。其中CalculatorServiceLocator.java中定義了webservice服務端的訪問URL,若是有必要能夠修改它;CalculatorProxy.java是調用服務端的代理類,咱們能夠經過它的實例來對webservice進行調用。
最後咱們新建一個Test類來進行測試:
Test.java:
packagews;
publicclassTest{
publicstaticvoidmain(Stringargs[]){
CalculatorProxycalculatorProxy=newCalculatorProxy();
try{
intresult =calculatorProxy.add(4,2);
System.out.println("the result is:"+result);
}catch(Exceptione) {
e.printStackTrace();
開啓tomcat啓動webservice,右擊Test.java-Run As-Java Application,輸出:
the result is:6
大功告成。