一:WebService简介
1:WebService介绍
WebService是一个平台独立的、低耦合的、自包含的、基于可编程的web应用程序,可使用开放的XML来描述、发布、发现、协调和配置这些应用程序,用于开发分布式交互操作的应用程序。
WebService技术,能运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件,就可相互交换数据或集成。依据WebService规范实施的应用之间,无论它们所使用的语言、平台或内部协议是什么,都可以相互交换数据。这么说吧,其实WebService就是一种跨编程语言和跨操作系统平台的远程调用技术(RPC的一种实现方式)。所谓可跨编程语言,就是说服务端程序和客户端程序可以以不同的语言编写也可以利用WebService互相调用;跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。远程调用,就是一台计算机的应用可以调用其他计算机上的应用。例如:我自己编写一个网站,里面想要个天气预报的功能,这个时候我肯定去调用气象局的接口服务而不是我自己发射卫星来监测天气,再引入我网站里。
2:为什么使用WebService
WebService能解决跨平台调用、跨语言调用、远程调用(RPC)
以各个网站显示天气预报功能为例,气象中心的管理系统将收集的天气信息并将数据暴露出来(通过WebService Server),而各大站点的应用就去调用它们得到天气信息并以不同的样式去展示(WebService Client),我们网站虽然提供了天气预报的服务,但其实它们什么也没有做,只是简单的调用了一下气象中心服务器服务接口而已。
3:WebService原理及重要术语
XML、SOAP、WSDL 是构成WebService平台的三大技术
一:基本术语
UDDI:Universal Description, Discovery, and Integration(统一描述、发现和集成)
UDDI是OASIS发起的一个开放项目,它使企业在互联网上可以互相发现并且定义业务之间的交互。
SOAP:simple object access protocal(简单对象访问协议)
①:是一种简单的、基于HTTP和XML的协议, 用于在WEB上交换结构化的数据,结构化数据实际上就是xml的数据
②:SOAP消息:请求消息和响应消息
③:HTTP+XML片断
WSDL:web service definition language(WebService定义语言)
①:对应一种类型的文件.wsdl
②:定义了WebService的服务器端与客户端应用交互传递请求和响应数据的格式和方式
③:一个WebService对应一个唯一的wsdl文档(理解为接口说明书)
SEI:WebService EndPoint Interface(终端,WebService的终端接口)
①:就是WebService服务器端用来处理请求的接口;我们可以理解为是xxxWebService的各个xxxWebServiceImpl实现类
CXF:Celtix + XFire,一个apache的用于开发webservice服务器端和客户端的框架
WebService基本原理
①:WebService是采用HTTP协议在客户端和服务端之间传输数据 ②:WebService传输的数据是使用XML封装后再传输交互,XML的优点在于它的跨平台性(因为市面上的语言基本上都支持xml解析) ③:WebService发送的请求内容和响应内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定
的HTTP消息头和XML内容格式就是SOAP协议规定的 ④:WebService服务器端首先要通过一个WSDL文件来说明自己有什么服务可以对外调用。简单的说,WSDL就像是一个说明书,用于
描述WebService及其方法、参数和返回值。 WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用
一个WebService服务之前,要知道该服务的WSDL文件的地址。 ⑤:WebService交互的过程就是,WebService遵循SOAP协议通过XML封装数据,然后由Http协议来传输数据。 注:WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址: 1:注册到UDDI服务器,以便被人查找 2:直接告诉给客户端调用者 总结:要想编写WebService接口就一定要以SOAP请求来传输数据(HTTP+XML),编写完成后把服务暴露到UDDI服务器上,这时调用者
可以通过指定的URL来生成WSDL
4:WebService两种开发方式
1:JAX-WS(Java API for XML Web Service):
JAX-WS规范是一组XML web services的JAVA API,JAX-WS允许开发者可以选择RPC-oriented或者message-oriented
来实现自己的web services。
在JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP,在使用JAX-WS过程中,开发者不需要编写任何生成和处
理SOAP消息的代码。JAX-WS的运行时实现会将这些API的调用转换成为对应的SOAP消息
缺点:我们必须借助WSDL说明书来生成一个java客户端代码,后期就像调用方法一样调用
2:JAX-RS(Java API for RESTful Web Servicecs):
是一个Java编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格创建Web服务。JAX-RS使用了JavaSE5引入
的Java标注来简化Web服务的客户端和服务端的开发和部署。
优点:不用编写客户端,只需要服务端提供RESTFul的URL调用即可
二:WebService服务端和客户端的开发(了解)
注:本章节案例用的全部注解在后面专门介绍(此章只是入门案例,具体在文章后面集成说明)!!!!!
此章里面的方式了解即可,因为在实际开发中都是以Spring来集成CXF方式开发服务端和客户端;
JAX-WS就是我们俗称的JDK(JDK版本1.6+才可以)开发,因为JDK自带这种方式开发客户端和服务端
Apache CXF = Celtix + XFire,ApacheCXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。
1:使用JAX-WS开发服务端 (熟悉流程)
/** * @Author AnHui_XiaoYang * @Email 939209948@qq.com * @Date 2021/7/4 11:41 * @Description 学生实体类 */ public class Student { private String id; //ID private String name; //姓名 private Integer age; //年龄 private String sex; //性别 private String address; //住址 private Date birthday; //生日 private Dog dog; //学生宠物狗 //下面省略get、set、构造器、toString自己补一下 } ///////////////////////////////////////////// /** * @Author AnHui_XiaoYang * @Email 939209948@qq.com * @Date 2021/7/4 11:42 * @Description 狗狗实体类 */ public class Dog { private String name; //名称 private String color; //颜色 private String msg; //介绍 //下面省略get、set、构造器、toString自己补一下 }