概念
WebService是一种跨编程语言、跨操作系统平台的远程调用技术。
运行方式
基础的 Web Services 平台是 XML + HTTP。XML 提供了一种可用于不同的平台和编程语言之间的语言。HTTP 协议是最常用的因特网协议。
Web Services 拥有三种基本的元素:SOAP、WSDL 以及 UDDI。
soap协议
概念
简单访问协议,是基于XML的简易协议,可使用应用程序在HTTP之上进行信息交换
SOAP 消息必须用 XML 来编码
SOAP 消息必须使用 SOAP Envelope 命名空间
SOAP 消息必须使用 SOAP Encoding 命名空间
SOAP 消息不能包含 DTD 引用
SOAP 消息不能包含 XML 处理指令
语法
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<!--必须的 Envelope 元素是 SOAP 消息的根元素。它可把 XML 文档定义为 SOAP 消息。-->
<soap:Header>
...
<!--可选的 Header 元素可包含有关 SOAP 消息的应用程序专用信息(比如认证、支付等) -->
</soap:Header>
<soap:Body>
...
<!--必需的 Body 元素可包含打算传送到消息最终端点的实际 SOAP 消息 -->
<soap:Fault>
...
<!--可选的 Fault 元素用于指示错误消息 -->
</soap:Fault>
</soap:Body>
</soap:Envelope>
一次WebService的调用,不是方法的调用而是sopa消息之间的输入输出
WSDL
概念
网络服务描述语言,WSDL 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。
<definitions>
根元素,定义WSDL消息
<types>
...
web service 使用的数据类型、方法的请求值和返回值类型、对象包含的属性类型
</types>
<message>
...
每个消息均由一个或多个部件组成,可以把它当做java中一个函数调用的参数
</message>
<portType>
...
方法和方法的输入输出
类似java中的一个函数库(或一个模块、一个类)
</portType>
<binding>
...
为每个端口定义消息格式和协议细节
</binding>
<service>
...
服务访问路径
</service>
</definitions>
UDDI
概念
UDDI 是一个独立于平台的框架,用于通过使用 Internet 来描述服务,发现企业,并对企业服务进行集成。
UDDI 经由 SOAP 进行通迅,是一种由 WSDL 描述的网络服务接口目录,是一种用于存储有关 Web Services 的信息的目录。
UDDI 就像一个注册中心,通过它可以获得有哪些服务以及服务的地址。
IDEA创建WebService项目
第一个演示程序,HelloWorld
1、新建项目时选择WebServices,IDEA会自动创建WebServices项目
自动生成的代码如下,main()方法加上启动成功打印信息
@WebService()
public class HelloWorld {
@WebMethod
public String sayHelloWorldFrom(String from) {
String result = "Hello, world, from " + from;
System.out.println(result);
return result;
}
public static void main(String[] argv) {
Object implementor = new HelloWorld();
String address = "http://localhost:9008/HelloWorld";
Endpoint.publish(address, implementor);
System.out.println("WebService 启动成功...路径:" + address);
}
}
运行成功
2、访问http://localhost:9008/HelloWorld?wsdl
出现以下界面表示发布成功
3、自动生成客户端相关代码
4、url写webservices项目的url加上 ?wsdl
选择生成文件存放的包
5、生成好后如下
另一种生成方式:打开cmd,在dos命令下输入 wsimport -s “src目录” -p “生成类所在包名” -keep “wsdl发布地址”
6、编写一个类来调用服务
public class MainTest {
public static void main(String[] args) {
HelloWorldService helloWorldService = new HelloWorldService();
// 通过service获取port
HelloWorld helloWorldPort = helloWorldService.getHelloWorldPort();
// 通过port获取服务
String xx = helloWorldPort.sayHelloWorldFrom("xx");
System.out.println(xx);
}
}
7、运行结果如下
WebService常用注解
@WebService( //标识该类是一个webService服务
serviceName="name" , //表示产生的服务的名称
targetNamespace="http://service.ws.cn") // WSDL 命名空间名称
@WebMethod(operationName="hello" , // 表示方法名称
exclude=true) // 将指定的public方法排除,用户不能访问
@WebParam(name="name") // 单个参数至WSDL部件或XML元素的映射,name为名称
@WebResult(name="return")// 返回值至WSDL部件或XML元素的映射,name为名称
小结
WebService是一种跨语言、跨平台的远程调用技术,使用开发协议进行通信,一次WebService的调用,不是方法的调用而是soap消息之间的输入输出。它是独立的并可通过WSDL进行自我描述。WSDL文档就类似RESTful API 接口文档,里面定义了某个WebService提供的接口和相关的参数信息,我们可以根据这个文档来调用WebService接口。WebService可以使用UDDI来发现,UDDI 就像一个注册中心,通过它可以获得有哪些服务以及服务的地址。