有段时间不写博客,一直在忙碌最近项目中用到了WebService,所以把它写下来,一来复习复习二来与大家共同学习交流。
什么是WebService?
WebService是各个不同的、相互独立的系统进行通信的一种技术标准。
有什么用?
可以实现多终端系统交互,如 手机、PDA、等(Android等大量的使用了WebService)
在学习如何构建一个WebService前,必需要先了解几个技术点:XML 、Http协议 、SOAP协议、WSDL
XML :一种数据描述语言
Http协议:定义了浏览器与Web服务器的通信规则
SOAP:建立在Http协议上的WebService通信协议
WSDL:描述WebService接口(就相当于是说明书它是XML格式的)
我建立一个WebService 这个WebService包含两个方法
SayHi(String yourName)
GetData()
地址:http://127.0.0.1:8888/jsweb 通过在地址后加入?wsdl 获取这个webservice的说明文档http://127.0.0.1:8888/jsweb?wsdl
这个文档内容如下:
<?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --><!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. --><definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://xgn.webservice" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://xgn.webservice" name="JavaWebService"> <types> <xsd:schema> <xsd:import namespace="http://xgn.webservice" schemaLocation="http://127.0.0.1:8888/jsweb?xsd=1"></xsd:import> </xsd:schema> </types> <message name="SayHi"> <part name="parameters" element="tns:SayHi"></part> </message> <message name="SayHiResponse"> <part name="parameters" element="tns:SayHiResponse"></part> </message> <message name="GetData"> <part name="parameters" element="tns:GetData"></part> </message> <message name="GetDataResponse"> <part name="parameters" element="tns:GetDataResponse"></part> </message> <portType name="javaws"> <operation name="SayHi"> <input message="tns:SayHi"></input> <output message="tns:SayHiResponse"></output> </operation> <operation name="GetData"> <input message="tns:GetData"></input> <output message="tns:GetDataResponse"></output> </operation> </portType> <binding name="myportNameBinding" type="tns:javaws"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding> <operation name="SayHi"> <soap:operation soapAction=""></soap:operation> <input> <soap:body use="literal"></soap:body> </input> <output> <soap:body use="literal"></soap:body> </output> </operation> <operation name="GetData"> <soap:operation soapAction=""></soap:operation> <input> <soap:body use="literal"></soap:body> </input> <output> <soap:body use="literal"></soap:body> </output> </operation> </binding> <service name="JavaWebService"> <port name="myportName" binding="tns:myportNameBinding"> <soap:address location="http://127.0.0.1:8888/jsweb"></soap:address> </port> </service> </definitions>
wsdl文档主要包含这几个元素:
types:包含这个WebService所使用的所有数据类型定义
message:包含有哪些方法
part:方法的签名
portType:包含哪些操作的容器
binding:这些操作具体的规范、接口
service:包含服务名称和地址等
下面来解读这份WSDL文档
<portType name="javaws"> <operation name="SayHi"> <input message="tns:SayHi"></input> <output message="tns:SayHiResponse"></output> </operation> <operation name="GetData"> <input message="tns:GetData"></input> <output message="tns:GetDataResponse"></output> </operation> </portType>
它包含SayHi和GetData方法 ProtType 名称是javaws
<binding name="myportNameBinding" type="tns:javaws">
方法容器javaws绑定到 myportNameBinding上
<service name="JavaWebService"> <port name="myportName" binding="tns:myportNameBinding"> <soap:address location="http://127.0.0.1:8888/jsweb"></soap:address> </port> </service>
服务名称是: JavaWebService
服务地址:http://127.0.0.1:8888/jsweb
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl 可以多动手解读网络上的其它webservice文档以加强理解
这就是WSDL文档的基本内容,在动手构建和使用WebService前还需要了解SOAP协议(它是WebService的核心).............