简单描述
百度百科对WebService的描述是:Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
个人总结(仅供参考):WebService英文翻译就是Web服务的意思,对于这种Web服务有以下特性:
跨平台
:各种语言均可以调用和发布WebService。易实现
:在Java中WebService被集成在JRE中,即rt.jar
下的javax.xml.ws
包。通过Java来发布一个WebService只需要一句代码。别的语言不太清楚,可能需要两句!易扩展
:当一台服务器不够时,可以横向扩展服务器。我也没具体实践过,但这一点肯定可以支持到位的。......
:有一种无法形容的感觉,一种称为WSDL的描述文档,用XSD再对WSDL文档进行格式描述。WSDL中一堆看起来好像有关联但又不知道怎么去关联的标签。文档中一堆类似tns
,type
,wsam: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 > input
和operation > output
定义服务的入参和出参。binding
设置WebService的通信协议,以上可以看到<soap:binding>
,<soap:operation>
标签,很明显这就是绑定SOAP协议。表示这个WebService需要通过SOAP协议才能调用。service
定义WebService和binding的映射。
SOAP协议(仅供参考)
上面提到soap协议,那么什么是SOAP协议。广搜资源,总结出流传的说法有两种:
- SOAP = RPC协议 + XML
- SOAP = HTTP协议 + XML
最终决定以百度百科和http://www.w3school.com.cn/soap/index.asp说的为准,即SOAP = HTTP协议 + XML
。
对于这个粗略的公式,简单的来说就是传送数据时用HTTP协议,但还基于XML做了两件事情:
- 用WSDL(即XML)来描述服务
即在服务请求路径之后添加?wsdl
来获取服务描述(WSDL文档) - 用XSD来定义WSDL中数据类型
在服务请求路径之后添加?xsd=1
来获取数据类型定义(XSD文档)。
那么在WebService客户端通过SOAP协议我们可以很容易拿到这两个信息,然后我们可以根据这描述信息构造出对应的请求参数和响应参数,并执行请求WebService接口。这就是SOAP协议的作用。
(完)