原文地址:http://www.eussi.top/view/22
1、webservice简介
1.1 什么是webservice
webservice也可以叫xml web service webservice, 轻量级的独立的通讯技术。它是基于web的服务,服务端提供的服务接口让客户端访问。是一项跨平台、跨语言的整合方案。
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。
1.2 webservice技术结构
协议层:TCP/IP
应用层: Http协议
SOAP: Http & xml
1.3 为什么要使用webservice
它是跨语言调用的解决方案。
WebService能够对外提供WebService服务(比如说我们可以将我们的服务提供给第三方来进行调用),我们也可以使用别人提供的WebService服务,如IP地址查询、天气预报 证券信息、手机号归属地查询、中英文翻译等
下面是网络上提供的免费的WebService服务 http://www.webxml.com.cn/zh_cn/index.aspx
1.4 webservice中的一些概念
WSDL(web service definition language webservice 定义语言),webservice服务需要通过wsdl文件来说明自己有什么服务可以对外调用。并且有哪些方法、方法里面有哪些参数
wsdl基于XML(可扩展标记语言)去定义的
- wsdl对应一个.wsdl的文件类型
- 定义了webservice的服务器端和客户端应用进行交互的传递数据和响应数据格式和方式
- 一个webservice对应唯一一个wsdl文档
SOAP(simple object access protocal简单对象访问协议),webservice通过http协议发送和接收请求时, 发送的内容(请求报文)和接收的内容(响应报文)都是采用xml格式进行封装,这些特定的HTTP消息头和XML内容格式就是SOAP协议
- 一种简单、基于HTTP和XML的协议
- soap消息:请求和响应消息
- http+xml报文
SEI(webservice endpoint interface webservice的终端接口),webservice服务端用来处理请求的接口,也就是发布出去的接口。
2、Java实现
2.1 server端
使用@Webservice实现接口:
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService //SE和SEI
public interface ISayHello {
@WebMethod //SEI中的方法
public String sayHello(String str);
}
接口实现:
import javax.jws.WebService;
@WebService
public class SayHelloImpl implements ISayHello{
@Override
public String sayHello(String str) {
System.out.println("call sayHello()");
return "Hello," + str + "I am Webservice";
}
}
发布:
import javax.xml.ws.Endpoint;
public class PublishWebService {
public static void main(String[] args) {
Endpoint.publish("http://localhost:8888/sayhello", new SayHelloImpl());
System.out.println("Publish Success !");
}
}
浏览器访问:http://localhost:8888/sayhello?wsdl 即可访问到wsdl文件
2.2 client端
使用JDK提供wsimport命令,运行以下内容:
wsimport -keep http://localhost:8888/sayhello?wsdl
生成client调用代码,保留生成的java文件,使用以下代码调用即可:
public class Client {
public static void main(String[] args) {
SayHelloImplService service = new SayHelloImplService();
SayHelloImpl sayHello = service.getSayHelloImplPort();
System.out.println(sayHello.sayHello("wangxm"));
}
}