一.Web service是什么
(1)基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据);
(2)一个跨语言、跨平台的规范(抽象);
(3)多个跨平台、跨语言的应用间通信整合的方案(实际);
以各个网站显示天气预报功能为例:
气象中心的管理系统将收集的天气信息并将数据暴露出来(通过WebService Server),
而各大站点的应用就去调用它们得到天气信息并以不同的样式去展示(WebService Client).
网站提供了天气预报的服务,但其实它们什么也没有做,只是简单了调用了一下气象中心服务器上的一段代码而已。
二.为什么要用Web service
web service能解决:
(1)跨平台调用;
(2)跨语言调用;
(3)远程调用;
三.什么时候使用web Service
(1)同一家公司的新旧应用之间;
(2)不同公司的应用之间;分析业务需求:天猫网与中通物流系统如何交互?
(3)一些提供数据的内容聚合应用:天气预报、股票行情;
四.Web Service中的几个重要术语
1、WSDL:web service definition language
直译 : WebService定义语言 1.对应一种类型的文件.wsdl 2.定义了web service的服务器端与客户端应用交互传递请求和响应数据的格式和方式 3.一个web service对应一个唯一的wsdl文档
2、SOAP:simple object access protocal
直译: 简单对象访问协议 1.是一种简单的、基于HTTP和XML的协议, 用于在WEB上交换结构化的数据 2.soap消息:请求消息和响应消息 3.http+xml片断
3、SEI:WebService EndPoint Interface(终端)
直译: web service的终端接口,
1. 就是WebService服务器端用来处理请求的接口
4、CXF:Celtix + XFire
一个apache的用于开发webservice服务器端和客户端的框架
五.开发webservice
开发手段:
(1)使用JDK开发(1.6及以上版本);
(2)使用CXF框架开发(工作中);
组成:
(1)服务器端;
(2)客户端;
1、使用JDK开发WebService
开发服务器端:
Web Service编码:
(1)@WebService( SEI和SEI的实现类);
(2)@WebMethod(SEI中的所有方法);
发布Web Service:
Endpoint(终端, 发布webservice);
开发客户端:
使用eclipse提供的web service浏览器访问
(1)查看对应的wsdl文档:…..?wsdl (一般浏览器);
(2)请求webService并查看请求和响应消息(webservice浏览器);
创建客户端应用编码方式访问
借助jdk的wsimort.exe工具生成客户端代码:wsimport -keep url //url为wsdl文件的路径;
借助生成的代码编写请求代码;
2、监听请求: 使用Eclipse的TCP/IP工具(端口转发)
(1)将服务器端的WSDL文档保存到客户端本地;
(2)修改文档: 将端口号从8989改为8080;
(3)根据本地的wsdl文档生成客户端代码, 并编写客户端的调用代码;
(4)配置eclipse的TCP/IP,启动监听;
(5)执行客户端代码发送WebService请求
3、调用免费的web service(天气预报)
1.Google”免费WebService”, 找到提供天气预报Webservice的网络地址
http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx
2.使用eclipse的web service浏览器访问
3.客户端编码方式访问
借助命令工具自动生成客户端代码
借助生成的代码编写请求代码
说明: 直接生成客户端代码会抛异常, 无法生成客户端代码, 解决办法: 1.将对应的wsdl文档保存到本地 2. 修改wsdl文档的部分内容: 将 <s:element ref="s:schema" /><s:any /> 替换成 <s:any minOccurs="2" maxOccurs="2"/> 备注: 这个是Java调用net的webservice都有的问题
4、使用CXF开发web service
加入cxf的jar包即可,其它不需要改动
六.WebService请求深入分析
1、分析WebService的WSDL文档结构
实例截图
文档结构
<definitions> <types> <schema> <element> </types> <message> <part> </message> <portType> <operation> <input> <output> </portType> <binding> <operation> <input> <output> </binding> <service> <port> <address> </service> </definitions>
文档结构图
重要标签的说明
types - 数据类型(标签)定义的容器,里面使用schema定义了一些标签结构供message引用; message - 通信消息的数据结构的抽象类型化定义。引用types中定义的标签; operation - 对服务中所支持的操作的抽象描述,一个operation描述了一个访问入口的请求消息与响应消息对。 portType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。 binding - 特定端口类型的具体协议和数据格式规范的绑定。 service- 相关服务访问点的集合; port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。
2、测试CXF支持的数据类型
(1)基本类型:int,float,boolean等
(2)引用类型:String;集合:数组,List, Set, Map;自定义类型 Student
3、一次Web service请求的流程
一次web service请求的本质:
(1)客户端向服务器端发送了一个soap消息(http请求+xml片断);
(2)服务器端处理完请求后, 向客户端返回一个soap消息;
七.CXF框架的深入使用
1、CXF的拦截器
为什么设计拦截器?
为了在webservice请求过程中,能动态操作请求和响应数据, CXF设计了拦截器.
拦截器分类:
(1)按所处的位置分:服务器端拦截器,客户端拦截器;
(2)按消息的方向分:入拦截器,出拦截器;
(3)按定义者分:系统拦截器,自定义拦截器;
2、拦截器API
Interceptor(拦截器接口);
AbstractPhaseInterceptor(自定义拦截器从此继承);
LoggingInInterceptor(系统日志入拦截器类);
LoggingOutInterceptor(系统日志出拦截器类);
3、编码实现拦截器:
(1)使用日志拦截器,实现日志记录:
LoggingInInterceptor
LoggingOutInterceptor
(2)使用自定义拦截器,实现用户名与密码的检验:
服务器端的in拦截器
客户端的out拦截器
xfzhang/123456
4、用CXF编写基于spring的web service
编码实现
(1)Server端:
创建spring的配置文件beans.xml,在其中配置SEI;
在web.xml中,配置上CXF的一些核心组件;
(2)Client端:
生成客户端代码;
创建客户端的spring配置文件beans-client.xml,并配置;
编写测试类请求web service;
5、添加自定义拦截器
Server端:在beans.xml中,在endpoint中配置上入拦截器
Client端:通过Client对象设置出拦截器