webservice(一)

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)通过路径解析服务端数据,生成客户端代码 图十二为生成的客户端代码
——借助生成的代码编写请求代码
在这里插入图片描述
图九
cmd
图十
在这里插入图片描述
图十一
在这里插入图片描述
图十二
在这里插入图片描述
图十三

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:cxf\apache-cxf-2.5.9\bin配置到环境变量path最开头。
第二步:执行wsdl2java url 见图三十二
第三步:建客户端包,写main函数
第四步:根据 wsdl:service name=“HelloWSImplService” 写工厂类 见图三十三
根据wsdl:port binding=“tns:HelloWSImplServiceSoapBinding” name=“HelloWSImplPort” 写getHelloWSImplPort方法
在这里插入图片描述
图三十一
在这里插入图片描述
图三十二
在这里插入图片描述
图三十三

5.6.2 看请求与相应的结构

相应结构分析。

<?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消息
在这里插入图片描述
图三十六

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值