WebService - 基础

版权声明:写文章辛苦,请不要复制粘贴,如果要,请注明来处 https://blog.csdn.net/u012627861/article/details/84945158

简单描述

百度百科对WebService的描述是:Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
个人总结(仅供参考):WebService英文翻译就是Web服务的意思,对于这种Web服务有以下特性:

  1. 跨平台:各种语言均可以调用和发布WebService。
  2. 易实现:在Java中WebService被集成在JRE中,即rt.jar下的javax.xml.ws包。通过Java来发布一个WebService只需要一句代码。别的语言不太清楚,可能需要两句!
  3. 易扩展:当一台服务器不够时,可以横向扩展服务器。我也没具体实践过,但这一点肯定可以支持到位的。
  4. ......:有一种无法形容的感觉,一种称为WSDL的描述文档,用XSD再对WSDL文档进行格式描述。WSDL中一堆看起来好像有关联但又不知道怎么去关联的标签。文档中一堆类似tnstypewsam:Action的定义,看起来让人觉得莫名其妙。

Java发布WebService

Java发布WebService是通过javax.xml.ws.Endpoint类,如下:

HelloWs.java:构造一个业务类

package com.caesar;

import javax.jws.WebService;

/**
 * Web服务
 * @author Caesar Liu
 * @date 2018/12/10 17:29
 */
@WebService
public class HelloWs {

    public void sayHello(){
        System.out.println("Hello WebService");
    }
}

Index.java:发布WebService

package com.caesar;

import javax.xml.ws.Endpoint;

/**
 * 启动类
 * @author Caesar Liu
 * @date 2018/12/10 17:29
 */
public class Index {
    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8080/hello", new HelloWs());
        System.out.println("发布成功");
    }
}

main方法执行后会阻塞,直到进程被杀死。在被杀死之前,可以通过publish方法的第一个参数指定的路径加上?wsdl来获取该WebService的描述,例如我这里就是通过http://localhost:8080/hello?wsdl来获取描述,获取后如下:
在这里插入图片描述

这就表示服务发布成功了!!!
想要继续深入的同学往下看!!!

WSDL文档(仅供参考)

上图就是一个WSDL文件的内容,这个文件内容是通过WebService路径后加上?wsdl后访问得到的,在网页中可以直接右键保存为wsdl文件(强制修改后缀)。可以看到图中有五个二级标签,解释如下:

  • types
    定义当前WebService使用的数据类型,以上所有的数据类型都从http://localhost:8080/hello?xsd=1路径中获取,该路径返回XSD文档(XML格式定义文档)。在HelloWs的sayHello上添加一个参数,然后通过该路径查看获取到的XSD文档你应该就明白了。
  • message
    定义服务方法的入参和出参对应的元素,然后通过XSD文档找到这个元素的入参和出参的具体设定。可以打开XSD文档,然后找到sayHello的xs:complexType设置,可以看到<xs:sequence/>,表示没有任何参数。
  • portType
    定义当前WebService提供的服务。通过operation定义服务方法,通过operation > inputoperation > output定义服务的入参和出参。
  • binding
    设置WebService的通信协议,以上可以看到<soap:binding><soap:operation>标签,很明显这就是绑定SOAP协议。表示这个WebService需要通过SOAP协议才能调用。
  • service
    定义WebService和binding的映射。

SOAP协议(仅供参考)

上面提到soap协议,那么什么是SOAP协议。广搜资源,总结出流传的说法有两种:

  1. SOAP = RPC协议 + XML
  2. SOAP = HTTP协议 + XML

最终决定以百度百科和http://www.w3school.com.cn/soap/index.asp说的为准,即SOAP = HTTP协议 + XML
对于这个粗略的公式,简单的来说就是传送数据时用HTTP协议,但还基于XML做了两件事情:

  1. 用WSDL(即XML)来描述服务
    即在服务请求路径之后添加?wsdl来获取服务描述(WSDL文档)
  2. 用XSD来定义WSDL中数据类型
    在服务请求路径之后添加?xsd=1来获取数据类型定义(XSD文档)。

那么在WebService客户端通过SOAP协议我们可以很容易拿到这两个信息,然后我们可以根据这描述信息构造出对应的请求参数和响应参数,并执行请求WebService接口。这就是SOAP协议的作用。

(完)

猜你喜欢

转载自blog.csdn.net/u012627861/article/details/84945158