0. 小补一手WebService,为后面的工作做个‘酝酿’
1. WebService
Web Services 脚本平台需支持 XML + HTTP。
可把您的应用程序转换为 web 应用程序。
Web Services 通过 Web 进行发布、查找和使用。
1.1 应用场景
将应用程序作为可重复调用的服务(翻译、天气)
应用程序之间的通讯
1.2 实现方法
服务端通过发布WSDL文档来发布服务(例如:jax-ws根据代码生成对应的WSDL文档)
客户端根据WSDL文档在本地代理远程的服务调用(例如:jax-ws根据WSDL文档生成代理类)
1.3 底层支持
1.3.1 SOAP(simple object access protocol 简单对象访问协议)
基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。
xml语法:
envelope:将此xml文档标识为一条soap消息
(header:可选,头信息)
body:请求/响应的消息内容
(default:可选,具体的错误说明)
1.3.2 WSDL(Web Services Description Language WebService描述语言)
基于xml的文档,用于描述 Web Services 以及如何对它们进行访问。
文档结构:
输入、输出的消息结构
端口(其实就是访问、调用方式)
使用的数据类型
使用的通信协议
通过不同的写法,支持四种类型的操作:
one-way:只接受消息,但不返回响应
request-response:接受请求,返回响应
solicit-response:发送请求,等待响应
notification:发送请求,不会等待响应
1.3.3 UDDI(Universal Desciption,Discovery and Integration可描述、发现、集成服务)
一种目录服务,通过它,企业可注册并搜索 Web services
基于SOAP实现通讯
存储有关 web services 的信息的目录(目录信息由WSDL描述)
1.4 有意思的是
抛开底层协议不谈,从代码编写上,一眼过去很容易产生mvc中的’controller’跟WebService好像都是某个东西的一种实现。。。其实二者并非在一个层面上
WebService是一种跨脚本的rpc框架,mvc在我看来更像是frontend风格的框架
2. 从WebService到JAX-WS
JavaTM API for XML-Based WebServices
JAX-WS在java端对WebService的实现概述见上文。。。
JAX-WS注解位于javax.jws包下(例如:@WebService、@WebMethod、@WebParam、@WebResult...)
JAX-WS是java端提出的WebService顶级规范(抽象),支持第三方厂商的具体实现:
apache cxf不仅仅支持JAX-WS,新版本更是增加了对JAX-RS的支持
3. 'JAX-WS’再往前一步 —— ‘JAX-RS’
JavaTM API for RESTful Web Services
JAX-RS是java端提供的RESTful顶级抽象,第三方的一些实现:
由sun公司起手的Jersey
apache开源的cxf
4. cxf
Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF
继承了 Celtix 和 XFire 两大开源项目
提供了多种组件 Binding 、DataBinding、Transport 以及各种 Format 的支持
支持多种协议:SOAP/XML(JAX-WS规范)、RESTful/JSON(JAX-RS)…
轻松集成到spring项目中