WebService學習總結(二)--使用JDK開發WebService

 

 

1、WebService的開發方法

  使用java的WebService時可使用一下兩種開發手段java

    使用jdk開發(1.6及以上版本)web

    使用CXF框架開發(工做中)服務器

2、使用JDK開發WebService

2.一、開發WebService服務器端

    一、定義一個interface,使用@WebService註解標註接口,使用@WebMethod註解標註接口中定義的全部方法,以下所示:框架

package com.myl.ws;

import javax.jws.WebMethod;
import javax.jws.WebService;

/**
 * 
 * @author maoyl
 * @version 2018.4.14
 * 定義SEI(WebService EndPoint Interface(終端))
 * 
 */

//使用@WebService註解標註WebServiceI接口
@WebService
public interface WebServiceInf {
    
    @WebMethod
    public String sayHello(String name);
    
    @WebMethod
    public String save(String name, String pwd);
    
}

  二、編寫interface的實現類,使用@WebService註解標註實現類,實現接口中定義的全部方法,以下所示:eclipse

package com.myl.ws.impl;

import javax.jws.WebService;

import com.myl.ws.WebServiceInf;

/**
 * 
 * @author myl
 * 具體實現
 *
 */

@WebService
public class WebServiceInfImpl implements WebServiceInf {

    @Override
    public String sayHello(String name) {
        System.out.println("WebService :" + name + ", 歡迎您");
        return name + "歡迎您";
    }

    @Override
    public String save(String name, String pwd) {
        System.out.println("name:" + name + ",password:" + pwd + "登陸成功");
        return name + "登陸成功";
    }

}

 

  三、使用Endpoint(終端)類發佈webservice,代碼以下:編輯器

package com.myl.ws;

import javax.xml.ws.Endpoint;
import com.myl.ws.impl.WebServiceInfImpl;
/**
 * 
 * @author maoyl
 * @version 2018.4.14
 * 測試
 * 
 */
public class WebServicePublish {
  public static void main(String[] args) {
    String address = "http://192.168.1.2:5555/WS_Server/Webservice";
    Endpoint.publish(address, new WebServiceInfImpl()); 
    System.out.println("發佈成功"); 
  } 
}

 

  運行WebServicePublish類,就能夠將編寫好的WebService發佈好了,WebService的訪問URL是:http://192.168.1.2:5555/WS_Server/Webservice?wsdlide

  ,以下圖所示工具

 

 

  這裏咱們編寫了一個WebServicePublish類來發布WebService,若是是Web項目,那麼咱們可使用監聽器或者Servlet來發布WebService,以下:

   1.使用監聽器發佈測試

package com.myl.ws.ulistener;

import javax.jws.WebService;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.xml.ws.Endpoint;
import com.myl.ws.impl.WebServiceInfImpl;

/**
 * 
 * @author maoyl
 * @version 2018.4.14
 * 使用監聽器發佈
 * 
 */

@WebService
public class WebServicePublishListener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        String address = "http://192.168.1.2:5555/WS_Server/Webservice";
        Endpoint.publish(address, new WebServiceInfImpl());
        System.out.println("使用ServletContextListener發佈成功---------");

    }

}

 

  監聽器在web.xml中配置:url

  <listener>
    <listener-class>com.myl.ws.ulistener.WebServicePublishListener</listener-class>
  </listener>

  在此環境下報錯

  解決方法:

  在@WebService標註的類上加上 @SOAPBinding(style = Style.RPC)便可解決

 
 

import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;


@WebService @SOAPBinding(style
= Style.RPC) public interface WebServiceInf {...} //---------------

import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;


@WebService
@SOAPBinding(style = Style.RPC)
public class WebServiceInfImpl implements WebServiceInf {...}

  查看資料:將jdk升級到jdk 1.6u17以上版本不加@SOAPBinding(style = Style.RPC)也不會有錯了,(貌似試了一下jdk1.7也要加,ps:若是報上面的錯誤就加上就行了)

 

  2.使用Servlet發佈WebService

 

package com.myl.ws.usevlet;

import javax.servlet.http.HttpServlet;
import javax.xml.ws.Endpoint;
import com.myl.ws.impl.WebServiceInfImpl;

/**
 * 
 * @author myl
 * 用於發佈WebService的Servlet
 */
public class WebServicePublishServlet extends HttpServlet {

    public void init (){
        String address = "http://192.168.1.2:5555/WS_Server/Webservice";
        Endpoint.publish(address, new WebServiceInfImpl());
        System.out.println(address + "-------------------");
    }    
    
}

 

servlet在web.xml配置

  <servlet>
      <servlet-name>webservicepublish</servlet-name>
      <servlet-class>com.myl.ws.usevlet.WebServicePublishServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
  </servlet>

 

若是不在web.xml配置,則須要在servlet實現類中加上 @WebServlet(value="",loadOnStartup=0) 

/**
 * 
 * @author myl
 * 用於發佈WebService的Servlet
 */
//將value屬性設置爲空字符串,這樣WebServicePublishServlet就不提供對外訪問的路徑
//loadOnStartup屬性設置WebServicePublishServlet的初始化時機
@WebServlet(value="",loadOnStartup=0)
public class WebServicePublishServlet extends HttpServlet {...}

將Web應用部署到服務器運行時,在初始化WebServicePublishServlet時,就會發布WebService了。以下圖所示:

同時用listener和servlet則顯示

關於發佈WebService主要就是經過javax.xml.ws.Endpoint類提供的靜態方法publish進行發佈,若是是普通的java項目,那麼能夠專門寫一個類用於發佈WebService,若是是Web項目,那麼可使用ServletContextListener或者Servlet進行發佈。

 

2.二、開發WebService客戶端

  一、藉助jdk的wsimort.exe工具生成客戶端代碼,wsimort.exe工具位於Jdk的bin目錄下,以下圖所示:

  執行命令:wsimport -keep url(url爲wsdl文件的路徑)生成客戶端代碼。

  注:-s 選擇生成文件的位置    

    -p 在該位置建立生成的文件夾做爲生成位置

    若是不用-s  -p 則在當前文件夾下生成生成客戶端代碼

    如: wsimport -s F:\MyeclipseWorkspace\WebServlet\src  -p com.myl.webservice.service -keep http://192.168.1.2:5555/WS_Server/Webservice?wsdl

顯示如上 則表示生成成功

 

 

二、 藉助生成的代碼編寫調用WebService對外提供的方法

  wsimport工具幫咱們生成了好幾個java類,但咱們只須要關心 WebServiceInfImplService 類和 WebServiceInfImpl 接口的使用便可,以下所示:

package com.myl.webservice.client;

import com.myl.webservice.service.WebServiceInfImpl;
import com.myl.webservice.service.WebServiceInfImplService;

/**
 * 
 * @author myl
 * @version 2018.4.14
 * 調用WebService的客戶端
 */
public class Test {
    
    public static void main(String[] args) {
        //建立一個用於產生WebServiceInfImpl實例的工廠,WebServiceInfImplService類是wsimport工具生成的
        WebServiceInfImplService factory = new WebServiceInfImplService();
         //經過工廠生成一個WebServiceInfImpl實例,WebServiceInfImpl是wsimport工具生成的
        WebServiceInfImpl wsImpl = factory.getWebServiceInfImplPort();
        //調用WebService的sayHello方法
        String resResult = wsImpl.sayHello("maoyl");
        System.out.println("調用WebService的sayHello方法返回的結果是:"+resResult);
        //調用WebService的save方法
        resResult = wsImpl.save("maoyal", "123");
         System.out.println("調用WebService的save方法返回的結果是:"+resResult);
        
    }

}

 

 

客戶端返回結果

 

服務器端接收到結果

 

 

  從調用返回的結果顯示,藉助wsimport工具生成的客戶端代碼已經成功調用到了WebService中的方法。以上就是使用JDK開發WebService的相關內容。

 

  2.生成客戶端代碼也能夠經過Myeclipse編輯器生成

    建立客戶端項目,右擊項目 new -Other.. 選擇 Web Service Client

Next

Next

Next --   Finish

 

 此方法生成的客戶端代碼和 wsimport -keep url 生成的同樣,調用方法也同樣

相關文章
相關標籤/搜索