WebService介绍及使用(Java)

导读:本篇文章讲解 WebService介绍及使用(Java),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

原文链接:https://blog.csdn.net/qq_34845394/article/details/86478208

WebService介绍及使用(Java)

一、WebService到底是什么?

先来看下标准的定义:

  WebService 也叫XML Web Service,WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。

  其实,一言以蔽之:WebService 是一种跨编程语言和跨操作系统平台的远程调用技术

  还可以从多个角度来理解WebService,从表面看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服务端。从深层次看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,你可以用任何你喜欢的语言,在任何你喜欢的平台上写WebService ,只要我们可以通过WebService标准对这些服务进行查询和访问。

二、WebService平台技术

  SOAP、WSDL、UDDI(UniversalDescriptionDiscovery andIntegration)三者构成了WebService的三要素。下面,详细阐述这三大技术:

  • SOAP
      WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用WebService。
    SOAP协议组成:
    SOAP协议 = HTTP协议 + XML数据格式
       SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。
  • WSDL
      好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 WebService也一样,WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。
      WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述WebService及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。
  • UDDI
      UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

三、WebService调用原理

在这里插入图片描述
实现一个完整的Web服务工作流程:

  1. Web服务提供者设计实现Web服务,并将调试正确后的Web服务通过Web服务中介者发布,并在UDDI注册中心注册;
  2. Web服务请求者向Web服务中介者请求特定的服务,中介者根据请求查询UDDI注册中心,为请求者寻找满足请求的服务;
  3. Web服务中介者向Web服务请求者返回满足条件的Web服务描述信息,该描述信息用WSDL写成,各种支持Web服务的机器都能阅读;
  4. 利用从Web服务中介者返回的描述信息生成相应的SOAP消息,发送给Web服务提供者,以实现Web服务的调用;
  5. Web服务提供者按SOAP消息执行相应的Web服务,并将服务结果返回给Web服务请求者。

四、WebService使用场景介绍

WebService使用场景可以看看这篇文章:https://blog.csdn.net/weidawei0609/article/details/7915071

五、WebService实例

Java体系中开发webservice的方式有很多种,我这里案例只是简单的使用JDK开发webservice方式,有兴趣的可以看看其它几种方式:java开发webservice的几种方式

一、创建服务端项目

服务端项目截图:
在这里插入图片描述

  1. 创建java Project项目,命名为ws_server。
  2. 创建接口
package com.leigq.www;

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

/**
 * WebService天气服务接口
 * <p>
 * 创建人:asus <br>
 * 创建时间:2019-01-14 14:24 <br>
 * <p>
 * 修改人: <br>
 * 修改时间: <br>
 * 修改备注: <br>
 * </p>
 */
@WebService
public interface WeatherServiceImpl {

    @WebMethod
    String getWeatherByCityname(String name);

}

说明:接口用@WebService注解,方法用@WebMethod注解。

  1. 创建接口实现类
package com.leigq.www;

import javax.jws.WebService;

/**
 1. WebService天气服务实现类
 2. <p>
 3. 创建人:asus <br>
 4. 创建时间:2019-01-14 14:26 <br>
 5. <p>
 6. 修改人: <br>
 7. 修改时间: <br>
 8. 修改备注: <br>
 9. </p>
 */
@WebService
public class WeatherService implements WeatherServiceImpl {

    @Override
    public String getWeatherByCityname(String name) {
        return name + "天气晴朗!";
    }
}

说明:类上用@WebService注解。

  1. 发布服务
package com.leigq.www;

import javax.xml.ws.Endpoint;

public class Main {

    public static void main(String[] args) {
        //发布天气服务,这里只是简单的测试
        Endpoint.publish("http://localhost:8085/ws_server/weather", new WeatherService());
        System.out.println("发布天气服务成功...");
    }
}

到此为止,服务器端程序创建成功,运行后可在浏览器中访问http://localhost:8085/ws_server/weather?wsdl查看是否发布成功。
在这里插入图片描述
能看到以上内容基本就发布成功了。

关于WSDL文件里面的内容详细介绍请看这里:WebService中的WSDL详细解析

二、创建客户端项目

生成客户端代码有多种方式,这里介绍jdk自带的wsimport工具。

客户端项目截图:
在这里插入图片描述

  1. 新建java Project项目,命名为ws_client。
  2. 选中src,鼠标右键,选择Open in terminal打开cmd,当然,你也可以win+R输入cmd,打开dos命令,进入到ws_client项目的src目录。
    在这里插入图片描述
    输入wsimport -keep http://localhost:8085/ws_server/weather?wsdl,点击回车,出现下图情况即为生成成功。(还可以将wsimport -keep http://localhost:8085/ws_server/weather?wsdl生成的文档以wsdl为后缀保存到项目中,输入wsimport -keep wsdl文件的路径执行)
    在这里插入图片描述
    刷新客户端代码会生成如下文件:
    在这里插入图片描述
  3. 客户端调用服务器端代码。
package com.leigq;

/**
 *  WebServer客户端测试
 * <p>
 * 创建人:asus <br>
 * 创建时间:2019-01-14 14:49 <br>
 * <p>
 * 修改人: <br>
 * 修改时间: <br>
 * 修改备注: <br>
 * </p>
 */
public class ClientTest {

    public static void main(String[] args) {
        WeatherServiceService factory = new WeatherServiceService();
        WeatherService servicePort = factory.getWeatherServicePort();
        String weather = servicePort.getWeatherByCityname("深圳");
        System.out.println(weather);
    }

}

控制台正确打印出语句即为调用成功,代码执行完毕。
在这里插入图片描述
参考:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/73799.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!