大家好,欢迎来到IT知识分享网。
WebService相关概念
基础概念
WebService是一种跨编程语言和跨操作系统平台的远程调用技术,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行
所谓远程调用,就是一台计算机a上 的一个程序可以调用到另外一台计算机b上的一个对象的方法无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据
譬如
天气预报接口。无数的应用需要获取天气预报信息;这些应用可能是各种平台,各种技术实现;而气象局的项目,估计也就一两种,要对外提供天气预报信息
WebService与Socket
- Socket是基于TCP/IP的传输层协议
Webservice是基于HTTP协议传输数据,http是基于tcp的应用层协议。
Webservice采用了基于http的soap协议传输数据 - Socket接口通过流传输,不支持面向对象
Webservice 接口支持面向对象,最终webservice将对象进行序列化后通过流传输 - Socket适用于高性能大数据的传输,传输的数据需要手动处理,socket通信的接口协议需要自定义
WebService平台技术
- XML+XSD
WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么),XML主要的优点在于它既是平台无关的,又是厂商无关的,XML解决了数据表示的问题
- SOAP
基于Http,基于XML,SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML(标准通用标记语言下的一个子集)编码信息的轻量级协议
- WSDL
WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用,
它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,
- UUID
UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范
webservice实际上就是http+XML
CXF
Apache CXF 是一个开源的web Services 框架,构建和开发 web Services ,它支持多种协议,支持数据格式:XML,JSON(仅在REST方式下支持)
- 创建Maven工程
pom文件加入依赖
<!-- 文件拷贝编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 输出编码 --><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 编译编码 --><maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<!-- CXF版本 --><cxf.version>3.0.0</cxf.version>
jar包依赖
<!-- CXF -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<!-- 如果CXF不集成到Web服务器中,必须添加该引用 -->
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>${cxf.version}</version>
</dependency>
<!-- End CXF -->
- 服务端代码
1.对外发布的接口
@WebServicepublic
interface WebServiceI {
@WebMethod()
public String hello(@WebParam(name="helloParams")String helloParams);
}
2.实现服务端
@WebService
public class WebServiceImpl implements WebServiceI {
@Override
public String hello(String helloParams) {
return "hello"+helloParams;
}
}
3.发布服务
public class WebServicePulish {
public static void main(String[] args) {
String address = "http://localhost:8080/demo/Webservice";
Endpoint.publish(address , new WebServiceImpl());
System.out.println("发布webservice成功!");
}
}
4.验证
浏览器输入http://localhost:8080/demo/Webservice?wsdl
- 客户端代码
创建一个客户端的项目,切换到项目的src目录下执行
wsimport -keep
http://localhost:8080/demo/Webservice?wsdl
[外链图片转存失败(img-bX9GFO9i-1569116200350)(en-resource://database/1113:1)]
public class client {
public static void main(String[] args) {
WebServiceImplService factory = factory.WebServiceImplService();
WebServiceI wsImpl = factory.getWebServiceImplPort();
String result = wsImpl.hello("web service");
System.out.println("调用返回结果"+result);
}
}
- wsimport使用
wsimport是Java自带的一个命令,所以需要先配置JDK环境变量
wsimport [opations]
d:指定要输出的文件的位置
s:表示要解析java的源码 ,默认解析出的是class字节码
p指定输出的包名
适用场景
1、跨防火墙通信
如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题。因为客户端和服务器之间通常会有防火墙或者代理服务器,但是开发难度大,程序很难维护。如果中间层组件换成WebService的话, 就可以从用户界面直接调用中间层组件
2、应用程序集成
企业里经常都要把用不同语言写成的、在不同平台上运行的各种程序集成起来,通过WebService,可以很容易的集成不同结构的应用程序
3、软件和数据重用
采用 WebService应用程序可以用标准的方法把功能和数据“暴露”出来,供其它应用程序使用,达到业务级重用。
不适用场景
1、单机应用程序
比如桌面应用程序,只需要与本机上的其它程序通信,在这种情况下,最好就不要用WebService,只要用本地的 API就可以了
2、局域网的同构应用程序
在许多应用中,所有的程序都是用VB或VC开发的,都在Windows平台下使用COM,都运行在同一个局域网上,在这些程序里,使用DCOM会比SOAP/HTTP有效得多
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15321.html