1. 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据);
2. 一个跨语言、跨平台的规范(抽象);
3. 多个跨平台、跨语言的应用间通信整合的方案(实际);
以各个网站显示天气预报功能为例:
气象中心的管理系统将收集的天气信息并将数据暴露出来(通过WebService Server),
而各大站点的应用就去调用它们得到天气信息并以不同的样式去展示(WebService Client).
网站提供了天气预报的服务,但其实它们什么也没有做,只是简单了调用了一下气象中心服务器上的一段代码而已。
web service能解决:
1.跨平台调用;
2.跨语言调用;
3.远程调用;
1. 同一家公司的新旧应用之间;
2. 不同公司的应用之间;
分析业务需求:天猫网与中通物流系统如何交互?
3. 一些提供数据的内容聚合应用:天气预报、股票行情;
直译 : WebService定义语言 1.对应一种类型的文件.wsdl 2.定义了web service的服务器端与客户端应用交互传递请求和响应数据的格式和方式 3.一个web service对应一个唯一的wsdl文档
直译: 简单对象访问协议 1.是一种简单的、基于HTTP和XML的协议, 用于在WEB上交换结构化的数据 2.soap消息:请求消息和响应消息 3.http+xml片断
直译: web service的终端接口,
1. 就是WebService服务器端用来处理请求的接口
一个apache的用于开发webservice服务器端和客户端的框架
1.使用JDK开发(1.6及以上版本)
2.使用CXF框架开发(工作中)
1.服务器端
2.客户端
1.@WebService( SEI和SEI的实现类);
2.@WebMethod(SEI中的所有方法);
发布Web Service:
Endpoint(终端, 发布webservice);
1.查看对应的wsdl文档:…..?wsdl (一般浏览器);
2.请求webService并查看请求和响应消息(webservice浏览器);
创建客户端应用编码方式访问
借助jdk的wsimort.exe工具生成客户端代码:wsimport -keep url //url为wsdl文件的路径;
借助生成的代码编写请求代码;
1.将服务器端的WSDL文档保存到客户端本地;
2.修改文档: 将端口号从8989改为8080;
3.根据本地的wsdl文档生成客户端代码, 并编写客户端的调用代码;
4.配置eclipse的TCP/IP,启动监听;
5.执行客户端代码发送WebService请求
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都有的问题
加入cxf的jar包即可,其它不需要改动
<definitions> <types> <schema> <element> </types> <message> <part> </message> <portType> <operation> <input> <output> </portType> <binding> <operation> <input> <output> </binding> <service> <port> <address> </service> </definitions>
2.引用类型:
String
集合:数组,List, Set, Map
自定义类型 Student
一次web service请求的本质:
1)客户端向服务器端发送了一个soap消息(http请求+xml片断);
2) 服务器端处理完请求后, 向客户端返回一个soap消息;
1.为了在webservice请求过程中,能动态操作请求和响应数据, CXF设计了拦截器.
1.按所处的位置分:服务器端拦截器,客户端拦截器;
2.按消息的方向分:入拦截器,出拦截器;
3.按定义者分:系统拦截器,自定义拦截器;
Interceptor(拦截器接口);
AbstractPhaseInterceptor(自定义拦截器从此继承);
LoggingInInterceptor(系统日志入拦截器类);
LoggingOutInterceptor(系统日志出拦截器类);
LoggingInInterceptor
LoggingOutInterceptor
使用自定义拦截器,实现用户名与密码的检验:
服务器端的in拦截器
客户端的out拦截器
xfzhang/123456
创建spring的配置文件beans.xml,在其中配置SEI;
在web.xml中,配置上CXF的一些核心组件;
Client端:
生成客户端代码;
创建客户端的spring配置文件beans-client.xml,并配置;
编写测试类请求web service;
Client端:通过Client对象设置出拦截器
原文:https://www.cnblogs.com/ZJOE80/p/12808688.html