概述
文章目录
- 1.预备知识
- 1.1 Schema约束
- 1.1.1XML约束概述
- 1.1.2 schema约束
- 1.2 HTTP协议
- 2.提出2个问题
- 2.1 问题一
- 2.2 问题二
- 3.关于Web Service 的几个问题
- 3.1 Web service是什么
- 3.2 为什么要用Web service
- 3.3 什么时候使用web service
- 4.WebService 中的几个重要术语
- 5.开发webservice
- 5.1概述
- 5.2 使用JDK开发WebService
- 5.2.1 开发服务器端
- 5.2.2 开发客户端
- 5.2.2.1 使用eclipse提供的web service浏览器访问
- 5.2.2.2 方法二(最终的目标是用方法二)
- 5.3 监听请求:使用Eclipse的TCP/IP monito工具(端口转发器)
- 5.4 调用免费的webservice(天气预报)
- 5.5 使用CXF开发web service(相对于之前的开发为基于jdk开发说的)
- 5.6 webservice请求深入解析
- 5.6.1 接图三十之后生成客户端代码,不用jdk命令(wsimport -keep url)而用wsdl2java.bat见图三十一
- 5.6.2 看请求与相应的结构
- 5.6.3 测试CXF支持的数据类型(都支持,但是jdk不支持map集合)
- 5.6.4 一次Web service请求的流程
1.预备知识
1.1 Schema约束
1.1.1XML约束概述
在xml技术里,可以编写一个文档文件来约束一个XML文件书写规范,这称之为XML约束。常用的约束技术有
- XML DTD
- XML Schema
1.1.2 schema约束
1.2 HTTP协议
2.提出2个问题
2.1 问题一
2.2 问题二
3.关于Web Service 的几个问题
3.1 Web service是什么
3.2 为什么要用Web service
3.3 什么时候使用web service
4.WebService 中的几个重要术语
5.开发webservice
5.1概述
-
开发手段:
—— 使用JDK开发(1.6及以上版本)
—— 使用CXF框架开发(工作中) -
组成:
—— 服务器端
—— 客户端
5.2 使用JDK开发WebService
5.2.1 开发服务器端
-
Web Service 编码:
—— @WebService(SEI(接口)和SEI(接口)的实现类) 见图2 与图3
—— @WebMethod(SEI中的所有方法) -
发布Web Service 见图4 图5
—— Endpoint(终端,发布webservice)
到这里服务器端就开发完成,并且发布完成,接下来就是客户端开发。
图2
图3
图4
图5
5.2.2 开发客户端
5.2.2.1 使用eclipse提供的web service浏览器访问
——查看对应的wsdl文档 …?wsdl(一般浏览器)见图6 图7
——请求webService并查看请求和响应消息(webservice浏览器)
图6
图7.1/6
图7.2/6
图7.3/6
图7.4/6
图7.5/6
图7.6/6
图8.1/2
图8.2/2
5.2.2.2 方法二(最终的目标是用方法二)
创建客户端应用编码方式访问
——借助jdk的wsimort.exe工具生成客户端代码: 见图九 见图十 见图十一
wsimport -keep url //url 为wsdl文件的路径(http://192.168.199.165:8986/day01_ws/hellows?wsdl)通过路径解析服务端数据,生成客户端代码 图十二为生成的客户端代码
——借助生成的代码编写请求代码
图九
图十
图十一
图十二
图十三
5.3 监听请求:使用Eclipse的TCP/IP monito工具(端口转发器)
第一步:配置端口转发器(记得看第四步,要启动tcp/ip端口转发器否则会出错)
图十四
第二步:将wsdl文件保存到本地
图十五
第三步:根据本地文件生成客户端代码
图十六1/2
图十六2/2
图十七
图十八
图十九
第四步 启动tcp/ip 如果不启动端口转发器会报错 见图二十1/2
图二十1/2
图二十2/2
图二十一
5.4 调用免费的webservice(天气预报)
1 百度“免费WebService”,找到提供天气预报Webservice的网络地址
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
2 使用eclipse的webservice浏览器访问 见图二十二
3 客户端编码方式访问
——借助命令工具自动生成客户端代码 见图二十三1/2
解决办法 将 <s:element ref=“s:schema” />
<s:any /> 替换成
<s:any minOccurs=“2” maxOccurs=“2” />
见 图二十四2/2
——借助生成的代码编写请求代码
找到wsdl:service name=“值” 图二十五
图二十二
图二十三1/2
图二十四2/2
图二十五
图二十六
5.5 使用CXF开发web service(相对于之前的开发为基于jdk开发说的)
加入cxf的jar包即可,其他的不需要改动。如图二十七
图二十七
5.6 webservice请求深入解析
图二十八
<definitions>
定义
<type>
类型
<message>
消息
<portType>
端口类型, 也就是接口 一个接口就是一个端口类型
<binding>
绑定 , 接口的实现类
<service>
服务
图二十九
图三十
5.6.1 接图三十之后生成客户端代码,不用jdk命令(wsimport -keep url)而用wsdl2java.bat见图三十一
根据请求文档来写代码。
第一步:将D:cxfapache-cxf-2.5.9bin配置到环境变量path最开头。
第二步:执行wsdl2java url 见图三十二
第三步:建客户端包,写main函数
第四步:根据 wsdl:service name=“HelloWSImplService” 写工厂类 见图三十三
根据wsdl:port binding=“tns:HelloWSImplServiceSoapBinding” name=“HelloWSImplPort” 写getHelloWSImplPort方法
图三十一
图三十二
图三十三
5.6.2 看请求与相应的结构
- <soapenv:Envelope xmlns:soapenv=“http://schemas.xmlsoap.org/soap/envelope/” xmlns:q0=“http://ws.day01_ws.atguigu.com/” xmlns:xsd=“http://www.w3.org/2001/XMLSchema” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>
- soapenv:Body
- q0:sayHello
BB
</q0:sayHello>
</soapenv:Body>
</soapenv:Envelope>
图三十四`
相应结构分析。
<?xml version='1.0' encoding='UTF-8'?>
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://ws.day01_ws.atguigu.com/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
name="HelloWSImplService" targetNamespace="http://ws.day01_ws.atguigu.com/">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://ws.day01_ws.atguigu.com/" elementFormDefault="unqualified"
targetNamespace="http://ws.day01_ws.atguigu.com/" version="1.0">
<!--
用于请求
<sayHello>
<arg0>string</arg0>
</sayHello>
用于响应
<sayHelloResponse>
<return>string</return>
</sayHelloResponse>
-->
<xs:element name="sayHello" type="tns:sayHello" />
<xs:element name="sayHelloResponse" type="tns:sayHelloResponse" />
<xs:complexType name="sayHello">
<xs:sequence>
<xs:element minOccurs="0" name="arg0" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="sayHelloResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
<!--
message:用来定义消息的结构
part:指定引用types中定义的标签片段
-->
<wsdl:message name="sayHelloResponse">
<wsdl:part element="tns:sayHelloResponse" name="parameters">
</wsdl:part>
</wsdl:message>
<wsdl:message name="sayHello">
<wsdl:part element="tns:sayHello" name="parameters">
</wsdl:part>
</wsdl:message>
<!--
portType:用来定义服务器端的SEI(接口)
operation:用来指定SEI中的处理请求方法
input:指定客户端应用传过来的数据,会引用上面的定义的<message>
output:指定服务器端返回给客户端的数据,会引用上面的定义的<message>
-->
<wsdl:portType name="HelloWS">
<wsdl:operation name="sayHello">
<wsdl:input message="tns:sayHello" name="sayHello">
</wsdl:input>
<wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse">
</wsdl:output>
</wsdl:operation>
</wsdl:portType>
<!--
binding:用于定义SEI的实现类
type属性:引用上面的<portType>
<soap:binding style="document"/>绑定的数据是一个document(xml)
operation name="sayHello":用来定义实现的方法
<soap:operation soapAction="" style="document" />传输的是document(xml)
input:指定客户端应用传过来的数据
<soap:body use="literal" />:文本数据
output:指定服务器端返回给客户端的数据
<soap:body use="literal" />:文本数据
-->
<wsdl:binding name="HelloWSImplServiceSoapBinding" type="tns:HelloWS">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="sayHello">
<soap:operation soapAction="" style="document" />
<wsdl:input name="sayHello">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="sayHelloResponse">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<!--
service:一个webservice的容器
name属性:它用于指定客户端容器类
port:用来指定一个服务器端处理请求的入口(就SEI的实现)
binding属性:引用上面定义的<binding>
address:当前webservice的请求地址
-->
<wsdl:service name="HelloWSImplService">
<wsdl:port binding="tns:HelloWSImplServiceSoapBinding" name="HelloWSImplPort">
<soap:address location="http://192.168.199.165:8987/day01_ws/hellows" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
图三十五
5.6.3 测试CXF支持的数据类型(都支持,但是jdk不支持map集合)
1 基本类型
int,float,boolean等基本类型都可以
2引用类型
String
集合:数组,List,Set,Map
自定义类型
5.6.4 一次Web service请求的流程
一次web service请求的本质
1)客户端应用向服务器端发送一个soap消息(httP请求+XML片段)
2)服务器端处理完请求后,向客户端返回一个soap消息
图三十六
最后
以上就是矮小花瓣为你收集整理的webservice(一)1.预备知识2.提出2个问题3.关于Web Service 的几个问题4.WebService 中的几个重要术语5.开发webservice的全部内容,希望文章能够帮你解决webservice(一)1.预备知识2.提出2个问题3.关于Web Service 的几个问题4.WebService 中的几个重要术语5.开发webservice所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复