webService

WebService

标签(空格分隔): webService


一、什么是webService:
webService即WEB服务。它使一种跨编程语言和操作系统的远程调用技术。

1、采用标准的SOAP(Simple Object Access Protocol)协议传输。SOAP属于w3c标准。
2、采用wsdl作为描述语言的webService使用说明书,wsdl属于w3c标准。
3、xml是webService跨平台的基础。

二、webService的使用场景

1、多个异构系统的集成
2、发布公共的服务接口

三、webService的三要素

1、SOAP
    SOAP是一种简单对象访问协议(Simple Object Access Protocol)是一种简单的基于XML的协议。它使用成语通过HTTP来交换信息,可以理解为:SOAP = HTTP + XML。
SOAP不是webService的专有协议,其他应用协议也使用SOAP传输数据。如:SMTP等。
2、WSDL(webService description language)
    是基于xml的御用描述webService及函数,参数,返回值。也就是说wsdl是webService的使用说明书。
3、UDDI
    UDDI是一种目录服务,企业经自己开发的webService注册在UDDI,也可以使用别的企业在UDDI上注册的服务,从而达到资源共享,促进全球经济合作。

四、使用JAX-WS开发webService

    JAX-WS 的全称为 Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For XML-RemoteProcedure Call)目前已经被JAX-WS 规范取代。从java5开始支持JAX-WS2.0版本,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本。
  • 编程思路
    1、编写SEI(Service Endpoint Interface)
    2、发布服务类
    3、根据服务地址查看wsdl(使用说明书)
    4、根据wsdl生成客户端代码
    使用命令:wsimport -s . -p 包名 wsdl地址
    5、客户端调用
  • 编码

    1. 编写SEI(ServiceEndpoint Interface),SEI在webservice中称为portType,在java中称为接口

      /**
       * 天气服务接口
       * @author MOTUI
       *
       */
      public interface WeatherService {
      
          /**
           * 根据城市名称获得天气情况
           * @param cityName
           * @return
           */
          public String getWeather(String cityName);
      }
    2. 编写SEI实现类,此类作为webservice提供服务类

      /**
       * 服务接口实现类
       * @author MOTUI
       *
       */
      @WebService
      public class WeatherServiceImpl implements WeatherService {
      
          @Override
          public String getWeather(String cityName) {
              if ("北京".equals(cityName)) {
                  return "阴转多云,18~25摄氏度";
              }
              return "其他地区正在完善";
          }
      }
      
    3. 发布服务

       /**
       * 发布服务
       * @author MOTUI
       */
      public class TestPublishService {
      
          public static void main(String[] args) {
              System.out.println("发布Service");
              /**
               * 两个参数
               * 参数1:对外访问地址
               * 参数2:发布的Service实现类
               * 地址中的端口号自己定义,只要不冲突即可
               */
              Endpoint.publish("http://localhost:9999/ws", new WeatherServiceImpl());
          }
      }
      
    4. 测试服务是否发送成功
      这里写图片描述

    5. wsdl的阅读
      a.wsdl从上往下阅读
      b.首先在wsdl中找到service 的name 也就是服务视图名
      c.通过服务视图名找到对应的binding,通过binding找到对应的type
      d.通过type找到对应的portType,要调用的方法,参数,返回值,描述都在PortType中

      这里写图片描述

    6. 生成客户端代码
      a.Wsimport介绍

           wsimport是jdk自带的webservice客户端工具,可以根据wsdl文档生成客户端调用代码(java代码).当然,无论服务器端的WebService是用什么语言写的,都可以生成调用webservice的客户端代码,服务端通过客户端代码调用webservice。
           wsimport.exe位于JAVA_HOME\bin目录下.
      

      b.常用参数为:

       -d<目录>  - 将生成.class文件。默认参数。
       -s<目录> - 将生成.java文件。
       -p<生成的新包名> -将生成的类,放于指定的包下。
       (wsdlurl) http://server:port/service?wsdl,必须的参数。
      
       示例:wsimport -s . -p 包名 wsdlurl
       注意:-s不能分开,-s后面有个小点
      
    7. 客户端调用
      方式一:

       /**
       * 测试客户端
       * @author MOTUI
       *
       */
      public class TestClient {
      
          public static void main(String[] args) {
              //获得WeatherServiceImplService对象
              WeatherServiceImplService serviceImplService = new  WeatherServiceImplService();
              //通过WeatherServiceImplService对象获得WeatherServiceImpl核心类
              WeatherServiceImpl serviceImplPort = serviceImplService.getWeatherServiceImplPort();
              //调用方法
              String weather = serviceImplPort.getWeather("北京");
              System.out.println(weather);
          }
      }

      方式二【标准的webService调用方式】:

      /**
       * 测试客户端
       * @author MOTUI
       *
       */
      public class TestClient1 {
      
          public static void main(String[] args) throws Exception {
              //服务器地址
              URL url = new URL("http://localhost:9999/ws?wsdl");
              /**
               * 参数1:wsdl 中的targetNamespace
               * 参数2:wsdl 中的服务视图名称
               */
              QName qName = new QName("http://service.motui.com/","WeatherServiceImplService");
      
              /**
               * 参数1:wsdl 地址
               * 参数2:QName
               */
              //创建服务器对象
              Service service = Service.create(url,qName);
              //获取protType
              WeatherServiceImpl port = service.getPort(WeatherServiceImpl.class);
              //调用方法
              String weather = port.getWeather("北京");
              System.out.println(weather);
          }
      }

    五、webService的优缺点
    优点:

    1、采用xml支持跨平台远程调用
    2、基于http的SOAP协议,可跨越防火墙
    3、支持面向对象开发
    4、有利于软件和数据的重用,实现松耦合。
    

    缺点:

    由于SOAP是基于xml传递数据,xml本身传递数据时会传输一些无关数据从而效率不高,随着SOAP协议的不断完善,SOAP协议增加了许多内容,这样那个就导致了使用SOAP协议去完成简单的数据传输的效率不高。
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值