天天看點

webservice開發---------如何使用jdk釋出webservice及調用

第一次見到webservice時,懵,懵,懵,它是什麼?主要功能是什麼?怎麼用?圍繞着這些開始webservice學習之旅

一:簡介

webService是一種跨程式設計語言和跨作業系統平台的遠端調用技術;

采用HTTP協定傳輸資料,采用XML格式封裝資料(即XML中說明調用遠端服務對象的哪個方法,傳遞的參數是什麼,以及服務對象的傳回結果是什麼)。

比如,我們的應用上需要用到天氣資訊,我們可以調用網際網路上查詢天氣的web服務,這樣使用者就可以在我們的網站上看到天氣資訊, 我們也可以把自己寫好的代碼釋出,這樣别人也可以調用;

webservice分為服務端(釋出服務)和用戶端(調用服務)兩部分;

二:Jdk釋出和調用webservice

這篇文章用Jdk釋出一個WebService服務及調用,下一篇介紹如何使用架構cxf釋出webservice;

釋出須知:

@WebService注解(注:此注解是jdk1.6提供的,位于javax.jws.WebService包中)-

  • 将java類标記為實作Web Service,将 Java 接口标記為定義 Web Service 接口。
  • 給類添加@WebService注解後,所有非靜态方法都會被釋出;
  • 方法上加@WebMethod(exclude=true)後,此方法不被釋出;
  • 如果一個類上,被添加了@WebService注解,則必須此類至少有一個可以公開的方法,否則将會啟動失敗;

通過EndPoint(端點服務類)釋出一個WebService

  • EndPoint是jdk提供的一個專門用于釋出服務的類,位于 javax.xml.ws.Endpoint包中
  • 該類的publish方法接收兩個參數,一個是本地的服務位址,二是提供服務的類。

WSDL(web service definition language)

  • WSDL是webservice定義語言, 對應.wsdl文檔, 一個webservice會對應一個唯一的wsdl文檔,

    定義了用戶端與服務端發送請求和響應的資料格式和過程

釋出服務:

1.建立webProject

2.建立類,加上@WebService注解

3.在類中定義你要釋出的方法

@WebService
public class SayWeb {

    public  String sayHello(String name){
        return "hello"+name;
    }

    public void sayBye(){
        System.out.println("bye");
    }
    /**
     * 添加@WebMethod(exclude=true)注解
     * */
    @WebMethod(exclude=true)
    public int sayInt(int i){
        return ++i;
    }   
    /**
     * 靜态方法
     * */
    public static void sayGood(){
        System.out.println("Good");
    }
    /**
     * main方法中釋出
     * */
    public static void main(String[] args) {
        String address="http://localhost:9001/service/sayweb";
        Endpoint.publish(address, new SayWeb());
        System.out.println("釋出成功");     
    }
}
           

4.釋出webservice

webservice開發---------如何使用jdk釋出webservice及調用

5.在浏覽器中搜尋釋出的位址

webservice開發---------如何使用jdk釋出webservice及調用

6.wsdl文檔

webservice開發---------如何使用jdk釋出webservice及調用

生成代碼方式調用服務 :

第一種:

jdk檔案中bin檔案裡面有一個wsimport.exe應用程式,是用來給用戶端生成調用代碼的

1.建立webprogect,作為用戶端

2.打開cmd指令 輸入

wsimport -s E:\workspace\client\src -p com.client -keep http://localhost:9001/service/sayweb?wsdl

-keep:表示生成用戶端代碼,url為wsdl文檔的位址

-p:表示生成的代碼所放的包名

-s:表示生成源碼(直接調用),src目錄

出現以下代碼,表示生成代碼成功,

parsing WSDL…

Generating code…

Compiling code…

3.重新整理項目,看到在指定包下生成調用源碼

webservice開發---------如何使用jdk釋出webservice及調用

4.編寫測試方法,調用代碼

public static void main(String[] args) {
        //擷取工廠 wsdl文檔:<service name="SayWebService">        
        SayWebService swb=new SayWebService();

        //擷取服務端口上的對象  wsdl文檔:<port name="SayWebPort" binding="tns:SayWebPortBinding">
        SayWeb sw=swb.getSayWebPort();

        sw.sayBye();        
        System.out.println(sw.sayHello("nihao"));

    }
           

第二種:

1.單擊項目右鍵—->new—–>web service client

webservice開發---------如何使用jdk釋出webservice及調用

2.輸入wsdl文檔位址—>finish

webservice開發---------如何使用jdk釋出webservice及調用

3.自動生成java代碼,主要使用的是***Locator和****Stub

webservice開發---------如何使用jdk釋出webservice及調用

4.測試

public static void main(String[] args) {

         try {
            SayWebServiceLocator swst=new SayWebServiceLocator(); 
            java.net.URL url=new java.net.URL("http://localhost:9001/service/sayweb?wsdl");
            SayWebPortBindingStub stub=new SayWebPortBindingStub(url,swst);
            stub.sayBye();          
            System.out.println(stub.sayHello("nihao"));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
           

測試結果

服務端:

webservice開發---------如何使用jdk釋出webservice及調用

用戶端

webservice開發---------如何使用jdk釋出webservice及調用

總結:

1.釋出服務端除了在main方法中,還可以在servlet容器初始化時,還可以放在監聽器中等

2.使用wsimport指令的方式調用webservice,在實際項目中,并不推薦,因為要生成很多java代碼檔案,如果服務端更改,需要重新生成代碼檔案,不過使用jdk去釋出webservice簡單易于操作,隻為更好的了解web服務的調用。在後面文章中着重介紹cxf架構以及如何調用如天氣等免費的web服務

繼續閱讀