zoukankan      html  css  js  c++  java
  • Web Service基础——基础概念

    1. Web Service基本概念

    Web Service(Web服务)是一种远程调用技术,他的作用就是从远程系统中获取业务数据。具体来说,Web Service可以让你的网站使用其他网站的资源,比如在网页上显示天气、地图、twitter上的最新动态等等。

    在Web Service的体系架构中有三个角色:服务提供者(Service Provider),也叫服务生产者;服务请求者(Service Requester),也叫服务消费者;服务注册中心(Service Register),也叫服务代理,服务提供者在这里发布服务,服务请求者在这里查找服务,获取服务的绑定信息。

    角色间主要有三个操作:

    • 发布(Publish),服务提供者把服务按照规范格式发布到服务注册中心;
    • 查找(Find),服务请求者根据服务注册中心提供的规范接口发出查找请求,获取绑定服务所需的相关信息。
    • 绑定(Bind),服务请求者根据服务绑定信息对自己的系统进行配置,从而可以调用服务提供者提供的服务。

    Web Service的实现是通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。

    相关概念:

    • XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是SOAP的基础。
    • SOAP:(Simple Object Access Protocol)简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。
    • WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。
    • UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

    2. 天气查询服务(入门)

    2.1 需求

    服务端:发布一个天气查询服务,接收客户端城市名,返回天气数据给客户端

    客户端:发送城市名称给服务端,接收服务端的返回天气数据,打印

    2.2 服务端

    2.2.1  创建SEI(Service Endpoint Interface)接口,本质上就是Java接口

    public interface WeatherInterface {
        public String queryWeather(String cityName); 
    }

    2.2.2  创建SEI实现类,在实现类上加入@WebService

    import javax.jws.WebService;
    //@WebService表示该类是一个服务类,需要发布其中的public的方法 @WebService public class WeatherInterfaceImpl implements WeatherInterface { @Override public String queryWeather(String cityName) { System.out.println("form client..."+cityName); String weather = "晴转多云"; return weather; } }

    2.2.3 发布服务,Endpoint发布服务,publish方法,两个参数:1.address:服务地址2. implementor:服务实现类

    import javax.xml.ws.Endpoint;
    
    public class WeatherServer {
        public static void main(String[] args) {
            //使用Endpoint发布服务
            Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl());
        }
    }

    2.2.4 测试服务是否发布成功,通过阅读使用说明书,确定客户端调用的接口、方法、参数和返回值存在,证明服务发布成功

    2.3 客户端

    2.3.1 wsimport命令生成客户端代码

    wsimport -s . http://127.0.0.1:12345/weather?wsdl

    生成如下代码

    2.3.2 根据使用说明书,使用客户端代码调用服务端

    • 第一步:创建服务视图,视图是从service标签的name属性获取
    • 第二步:获取服务实现类,实现类从portType的name属性获取
    • 第三步:获取查询方法,从portType的operation标签获取
    import com.zang.ws.jaxws.ws.WeatherInterfaceImpl;
    import com.zang.ws.jaxws.ws.WeatherInterfaceImplService;
    
    public class WeatherClient {
        public static void main(String[] args) {
            // 创建服务视图
            WeatherInterfaceImplService weatherInterfaceImplService = new WeatherInterfaceImplService();
            // 获取服务实现类
            WeatherInterfaceImpl weatherInterfaceImpl = weatherInterfaceImplService
                    .getPort(WeatherInterfaceImpl.class);
            // 调用查询方法,打印
            String weather = weatherInterfaceImpl.queryWeather("北京");
    
            System.out.println(weather);
        }
    }

    3. Web Service优缺点

    优点:

    • 发送方式采用http的post发送,http的默认端口是80,防火墙默认不拦截80,所以可以跨防火墙。
    • 采用XML格式封装数据,XML是跨平台的,所以webservice也可以跨平台。
    • Web Service支持面向对象。

    缺点:

    • 采用XML格式封装数据,所以在传输过程中,要传输额外的标签,随着SOAP协议的不断完善,标签越来越大,导致webservice性能下降。

    4. Web Service应用场景

    4.1 跨越防火墙通信

    Web服务使用基于XML消息处理作为基本的数据通信方式,应用程序可以使用HTTP和XML消息等标准在基于Web的应用程序之间交换信息,从而跨越防火墙。

    4.2 应用程序集成

    Web服务的开放标准使组织创建可重用的应用程序接口。当多个应用程序被包装成一个或一组Web服务之后,任何应用程序理论上都可以通过SOAP消息与任何其他应用程序进行通信。

     4.3 软件复用

    软件复用是在软件开发中避免重复劳动的解决方案。Web服务实现了业务级别的软件复用,通过互相调用Web服务,实现了Web服务的共享,Web服务的使用企业不需要再重新开发其他企业中已经存在的服务。

    以天气Web服务为例,示例如下

    5. Web Service适用场景

    适用场景:

    • 发布一个服务(对内/对外),不考虑客户端类型,不考虑性能,建议使用webservice。
    • 服务端已经确定使用webservice,客户端不能选择,必须使用webservice。

     不适用场景:

    • 考虑性能时不建议使用webservice。
    • 同构程序下不建议使用webservice,比如java 用RMI,不需要翻译成XML的数据。

       

  • 相关阅读:
    LeetCode15 3Sum
    LeetCode10 Regular Expression Matching
    LeetCode20 Valid Parentheses
    LeetCode21 Merge Two Sorted Lists
    LeetCode13 Roman to Integer
    LeetCode12 Integer to Roman
    LeetCode11 Container With Most Water
    LeetCode19 Remove Nth Node From End of List
    LeetCode14 Longest Common Prefix
    LeetCode9 Palindrome Number
  • 原文地址:https://www.cnblogs.com/zjfjava/p/9000063.html
Copyright © 2011-2022 走看看