Web Service:是使应用程序可以 以 与平台和编程语言无关的方式进行相互通信的一项技术规范。Web服务是一个软件接口,它描述了一组可以在网络上通过标准化的XML消息传递访问的操作。它使用基于XML语言的协议来描述要执行的操作或者要与另一个Web服务交换的数据。
W3School :WSDL:WSDL is a document written in XML. The document describes a Web service. It specifies
the location of the service and the operations (or methods) the service exposes.
SOAP:(Simple Object Access Protocol)简单对象访问协议, 是在分散或分布式的环境中交换信息并执行远程过程调用的轻量级协议,是一个基于XML的协议。
W3School :SOAP is a simple XML-based protocol to let applications exchange information over HTTP.
SOAP协议可以说是一种基于HTTP协议之上的一种协议。HTTP协议的请求数据或者响应数据都是文本格式的,而SOAP协议就是将我们应用程序的对象或者数据封装层XML格式的数据,然后作为HTTP的响应数据或者请求数据进行传送。然后通过WS-binding帮助我们在XML格式的数据与应用程序的对象之间进行转换。
以下是使用jdk自带的JAX-WS实现开发的web service
首先开发服务器端的程序:
1. 新建普通的java项目即可。
2. 创建如下结构的类:
先创建一个接口Speakable:
要注意,记得写上annotation @WebService。有了接口还需要有一个实现类Duck(会讲话的鸭子):
接口和实现类都开发好了就要发布服务了,发布服务的代码如下:Starter.java
发布服务之后我们就可以访问WSDL的定义了:
打开IE浏览器,我们在地址栏输入:http://localhost:3737/ws?wsdl 如下图:
好吧,为了开发一个正常一点的web service项目,我们需要在创建一个java Project。
创建好新的java项目后。我们发现如果要开发的客户端跟服务器端在不同的地方,那么,我们根本无法获得服务,比如我们要调用Duck的speak方法,那是不可能的事情啊,因为客户端和服务器端在不同的机器还可能使用不同的开发语言。
我们可能会想能不能通过上面发布的wsdl地址进行访问?
而wsdl仅仅只是描述用的,根本不用调用。
是的,我们可以让wsdl文件转为我们需要的类和接口。而这个转换过程可以借助wsimport(如果是axis2或者cxf框架可能会有其他的方式——还没看,不了解!)
这样子,在我们的G盘的ws目录下面就会生产我们需要的代码了
将整个包拷贝到我们新创建的客户端项目中,并创建我们需要的测试类
测试类的代码很简单:
打印结果:lin tell wu duck!~
JAX-WS实现web service大概就是这样的形式,还有的开发方式是先写wsdl文件,然后再生成客户端和服务器端的代码。还有使用CXF,AXIS2开发web service。
W3School :WSDL:WSDL is a document written in XML. The document describes a Web service. It specifies
the location of the service and the operations (or methods) the service exposes.
SOAP:(Simple Object Access Protocol)简单对象访问协议, 是在分散或分布式的环境中交换信息并执行远程过程调用的轻量级协议,是一个基于XML的协议。
W3School :SOAP is a simple XML-based protocol to let applications exchange information over HTTP.
SOAP协议可以说是一种基于HTTP协议之上的一种协议。HTTP协议的请求数据或者响应数据都是文本格式的,而SOAP协议就是将我们应用程序的对象或者数据封装层XML格式的数据,然后作为HTTP的响应数据或者请求数据进行传送。然后通过WS-binding帮助我们在XML格式的数据与应用程序的对象之间进行转换。
以下是使用jdk自带的JAX-WS实现开发的web service
首先开发服务器端的程序:
1. 新建普通的java项目即可。
2. 创建如下结构的类:
![](https://i-blog.csdnimg.cn/blog_migrate/f0c132098e2a93eecfe5c0a1e23b3726.png)
先创建一个接口Speakable:
- package com.piedra.ws;
- import javax.jws.WebService;
- @WebService
- public interface Speakable {
- public String speak(String from , String to , String cont);
- }
要注意,记得写上annotation @WebService。有了接口还需要有一个实现类Duck(会讲话的鸭子):
- package com.piedra.ws.impl;
- import javax.jws.WebService;
- import com.piedra.ws.Speakable;
- @WebService(endpointInterface="com.piedra.ws.Speakable")
- public class Duck implements Speakable {
- @Override
- public String speak(String from, String to, String cont) {
- return from + " tell " + to + " " + cont ;
- }
- }
接口和实现类都开发好了就要发布服务了,发布服务的代码如下:Starter.java
- package com.piedra.ws.main;
- import javax.xml.ws.Endpoint;
- import com.piedra.ws.impl.Duck;
- public class Starter {
- public static void main(String[] args) {
- String wsdlURL = "http://localhost:3737/ws";
- Endpoint.publish(wsdlURL, new Duck());
- }
- }
发布服务之后我们就可以访问WSDL的定义了:
打开IE浏览器,我们在地址栏输入:http://localhost:3737/ws?wsdl 如下图:
![点击查看原始大小图片](https://i-blog.csdnimg.cn/blog_migrate/22276e2dfd40509facf753785d5e0d63.png)
好吧,为了开发一个正常一点的web service项目,我们需要在创建一个java Project。
创建好新的java项目后。我们发现如果要开发的客户端跟服务器端在不同的地方,那么,我们根本无法获得服务,比如我们要调用Duck的speak方法,那是不可能的事情啊,因为客户端和服务器端在不同的机器还可能使用不同的开发语言。
我们可能会想能不能通过上面发布的wsdl地址进行访问?
而wsdl仅仅只是描述用的,根本不用调用。
是的,我们可以让wsdl文件转为我们需要的类和接口。而这个转换过程可以借助wsimport(如果是axis2或者cxf框架可能会有其他的方式——还没看,不了解!)
![点击查看原始大小图片](https://i-blog.csdnimg.cn/blog_migrate/39598c0995aa5b991cbb31689e00e45e.png)
这样子,在我们的G盘的ws目录下面就会生产我们需要的代码了
将整个包拷贝到我们新创建的客户端项目中,并创建我们需要的测试类
![](https://i-blog.csdnimg.cn/blog_migrate/95ad5b49d1d496b03e86f33b2963ca04.png)
测试类的代码很简单:
- package com.piedra.ws.client;
- import com.piedra.ws.impl.DuckService;
- import com.piedra.ws.impl.Speakable;
- public class Test {
- public static void main(String[] args) {
- Speakable duck = new DuckService().getDuckPort();
- System.out.println(duck.speak("lin", "wu", "duck!~"));
- }
- }
打印结果:lin tell wu duck!~
JAX-WS实现web service大概就是这样的形式,还有的开发方式是先写wsdl文件,然后再生成客户端和服务器端的代码。还有使用CXF,AXIS2开发web service。