WebService第一天
WebService第一天
【课程安排】:
整体安排:2天:
第一天:webservice入门,JDK规范和实现:jax-ws,相关概念
第二天:CXF框架,和spring的集成开发。Hessian的开发。
今日安排:(jax-ws)
- 为什么要用ws?
- 第一个ws应用(联网,在网上连接已经提供的服务,来获取数据。)
- Ws概述(概念、三要素wsdl.soap.uddi)
- Jax-ws(sun规范,开发服务端和客户端)
- Ws深入探讨(理解、应用场景)--阅读
- WSDL详解(规范)
- SOAP详解(规范)
- WebService注解
- 复杂类型的支持+回顾
- 调试工具SOAPUI
【学习目标】:
- 理解远程调用的思想
- 学会JAX-WS的服务端和客户端的开发(接口的开发和调用)
- 调试工具的使用。
为什么要用Webservice
Webservice是什么?是一个远程调用技术。
远程:相对于本地,不是当前应用服务的。
调用:数据交互。
原来的数据传输处理方式
原来的都是单机系统,
特点:数据的存储和调用都是透明的。比如数据库的存储方式、类型等。都是知道的、模块之间的调用也是随意的、透明的。
业务需求的问题
1.自己想要,但没有
2.自己有数据,别人想要
如何解决上述问题
- 开放数据库权限?(在一个机房,是一个单位的不同系统)
- U盘拷贝?(高考业务,每年只查询一次,教育局才有)
- 自己收集数据?
- ……
我们的需求
可以通过接口的技术来获取数据。
接口的概念:
需要什么接口呢?
以前学过socket技术,就是一种接口技术,它有服务端和客户端,相互传递数据。
我们需要什么样的呢?
第一个Webservice应用
业务需求
我们在本地编写客户端,来调用网络上现成的服务端的ws,获取手机号归属地的信息。
http://www.jisuapi.com/api/
我们用:http://www.webxml.com.cn/
编写客户端调用远程的手机号归属地信息
1.创建一个java工程
ws_day1_firstclient
2,。根据Webservice的wsdl地址生成客户端代码
wsdl就是个xml,我们看不懂,让程序看,让程序生成java代码就可以了。
打开cmd窗口,输入命令:
会自动生成java文件,将class删掉。
【提示】
如果生成的代码提示错误:
原因:jdk的原因。
jdk6和jdk7对ws的客户端的代码支持的不太一样。
解决方案:
1)如果工程一定要用1。6,则需要手动修改生成的代码,将方法的参数删掉一个:
2)就将工程的jdk版本变成1。7
3.编写客户端调用程序
客户端代码:
运行结果:
Webservice概述
什么是Webservice
W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。 |
简单的说:WebService即Web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术。
|
提示:市面上接口应用的技术很多,不止是webservice。
web Service:有两大类:
一类:传统的webservice,大web service,相对复杂。
一类:轻量级的webservice
前世今生
三要素(面试)
WebService的三要素是:
- SOAP (Simple Object Access Protocol):简易对象访问协议,soap用来描述传递信息的格式。
- WSDL (WebServices Description Language):Web服务描述语言,用来描述如何访问具体的接口。
- UDDI (Universal Description Discovery and Integration):通用描述、发现及整合,用来管理、分发、查询webService。
UDDI:
弱化uddi,原因:现在的接口交互,一般服务方和调用方直接商量。 |
Jax-WS的快速入门
Jax-WS是什么
解读说明书
白皮书:《JAX-WS.pdf.pdf》
服务端的开发
1.先编写sei(接口和实现类)
接口
实现类:
2.加注解
最基本的注解,在实现类上加@Webservice,该类就变成Webservice的服务类了。
3.发布服务
api:
测试一下是否发布成功:
方法就是通过访问ws的说明书wsdl,看是否能显示。
访问的格式:Webservice地址+?wsdl
【扩展】
如何在Windows下查看端口占用情况:
客户端的开发
1.建立一个客户端的工程
2.通过wsimport命令+wsdl文档,获取客户端java程序(stub桩,本地代理接口类实例)
wsimport是jdk自带的命令。
在cmd中输入命令和参数:
将生成的代码(桩 )直接拷贝到工程中
3.编写客户端调用代码:
缺点:代码过度耦合生成的代码。代码不灵活。
客户端的开发-优化
问题:客户端的代码耦合到生成的代码中了(比如访问的服务端地址等,不便于移植)
通过分析Servcie类不能new:
新建一个客户端:
客户端代码:
WebService技术深入探讨
理解WebService
可以从多个角度来理解WebService,从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服务端。从深层次看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。 WebService平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,WebService平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。Web service平台必须提供一种标准来描述Web service,让客户可以得到足够的信息来调用这个Web service。最后,我们还必须有一种方法来对这个Web service进行远程调用,这种方法实际是一种远程过程调用协议(RPC)。为了达到互操作性,这种RPC协议还必须与平台和编程语言无关。 |
优点
优点(摘自百度百科):
|
应用场景
WebService是一门新兴和有前途的技术,企业中应用越来越广泛。
建议使用:
不建议使用:
大家可以看一下课前资料:
平台技术构成
XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。
XML+XSD是WebService的数据传输的基础(了解即可):
WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。XML是WebService平台中表示数据的格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。 XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,64位?这些细节对实现互操作性很重要。XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。WebService平台就是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合WebService标准,所有你使用的数据类型都必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。 |
下面分别详细说一下WSDL和SOAP的概念和内容:
WSDL说明书详解
什么是WSDL
WSDL:
好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。 WebService也一样,WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。 WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。 WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。 |
Wsdl大家经常称之为webservice的说明书。
注意:
wsdl的地址:http://127.0.0.1:8888/mobile?wsdl
Webservice地址:http://127.0.0.1:8888/mobile
wsdl的基本结构
w3c中规定:
注意:规范和实现还是有少许差别的。:java的服务端生成的wsdl和.net生成的会有少许差距。
wsdl的阅读(看懂即可)
从下往上阅读
Service服务视图
描述Webservice服务的一些信息,名称、地址、提供的服务端点等
Binding:绑定
描述端口的一些传输协议等
PortType:端口类型
作用:描述Webservice服务的具体服务操作(方法)
message:消息
描述,请求或响应的数据内容
type:数据类型
描述参数的类型、个数等
【了解】
wsimport客户端生成桩是根据wsdl文件生成的。
问题:客户端是从服务端直接拉取下来的代码吗?
不是!!!!!!!客户端根本就不知道服务端的代码怎么写的。
离线wsdl
在线解析:
但有时候,需要离线解析。
场景:你开发客户端的时候,不能和服务端网络连接。但程序还要开发,通过分析发现,客户端开发主要有wsdl的文档就可以了。因为有该文档,就可以生成桩(客户端代码)。
因此我们可以将wsdl保存下来,在不能访问服务端的情况下使用。
等开发完成,再将客户端程序拿到能访问到服务端的环境中测试。
SOAP协议详解
什么是soap(能看的懂)
SOAP,Simple Object Access Protocol,简单对象访问协议,简单的说就是用于访问网络服务的协议;它是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。 SOAP是一种网络通信协议,用于网络上、不同平台、不同语言的应用程序间的通讯。 WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。 SOAP协议 = HTTP协议 + XML数据格式。 SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。 SOAP很就简单并可扩展支持面向对象,允许跨防火墙。 SOAP被作为 W3C 标准来发展。 SOAP现行两个版本:1.1和1.2。 |
更多信息可以参考W3C文档:
http://www.w3school.com.cn/soap/soap_intro.asp
SOAP、Http、TCP/IP之间的关系—了解
打个比方:
SOAP协议,其实不只是ws使用,邮件smtp传输协议也是这个。
代理工具TCP/IP Monitor
代理的基本原理:
eclipse内置的插件代理工具:
配置方法:
启动代理:
SOAP1.1协议分析
使用:直接将客户端调用的端口改成代理服务器的端口:
再次访问,在代理服务器上看传输的消息。
请求报文:
响应:
SOAP消息的标准格式
消息的传递相当于一个信封。
信封头(皮)(报头):地址,收件人。。
信纸:(报文):具体的业务信息内容
完整结构:
SOAP1.2协议分析
更改服务端的soap版本
启动服务,报错:
说明少包,没法生成soap1。2协议的wsdl。
该包支持soap1。2的服务。
将lib中的jar全部导入到工程中,引入类路径。
请求消息:
响应的:
SOAP1.1和SOAP1.2协议的异同
SOAP1.1和1.2版本之间的大部分差异通常也是可以忽略的
SOAP1.1只可以绑定到HTTP协议,而SOAP1.2除了HTTP协议之外还支持SMTP绑定。在JAX-WS中,类似于大多数框架,SOAP1.1作为默认实现,尽管如此在JAX-WS中可以随时采用SOAP1.2。
不同版本协议的调用关系
应用的价值:
- 尽量使用同版本的来相互调用,原因,兼容性好,性能高。
- 如果服务端使用1。1,那么客户端只能使用1。1,但服务端使用1。2,那么客户端可以使用1。1或1。2。,优先用1。2。但国内,很多客户端的开发为了适应不同版本的服务端,会用1。1来开发。
jax-ws客户端会自动适应服务端的版本,无法演示。明天用cxf来演示。
Webservice注解(重要)
为什么要用注解
反过来说:只要使用了注解,那么服务端的代码怎么改其实都对wsdl或客户端没有影响。
好处:屏蔽了服务端的代码的具体内容。
常见ws注解的分类和使用
类上面的注解
方法上面的注解
【推荐工具】
文件比较工具。
Webservice的方法的编写要求和方法隐藏
Webservice的sei的方法的要求:
复杂数据类型的支持+JaxWS回顾小结
诉求(需求)
服务端
1.新建项目:
2.服务端:
编写步骤:
- sei(接口和实现类)
实现类:
- 加注解
提示:1。2的协议需要导入扩展包
- 发布
测试:
访问wsdl:
看版本:
1。1
1。2
复杂返回对象
客户端
1)使用wsimport命令生成桩
添加参数支持1。2的桩的生成:
将其拷贝到工程中
2)编写客户端代码
小结:ws支持简单的对象传输(通常是字符串),也支持复杂对象的传输,甚至mp3音乐、图片。
【课后扩展选作】
提示:
会文件流的操作,就可以做这个功能。
关于Webservice的传输数据方式
通常,实际业务开发过程中,为了保证ws真正跨平台、跨语言,一般传递字符串。一般该字符串,使用xml或者json表示。无论复杂,还是简单的数据,都可以用其表示!
这样设计之后,工作量会转换到组装和解析xml和json上面了,可能有大量的业务逻辑。
列表:
"[{},{},{},{}]"
现在企业对接口开发的思想:简化接口的开发难度,难度转移到业务上(解析和封装json上了)
开发角度上的使用
服务端的使用
作用:发布一个服务,给别人用—提供数据(l类似于数据库了)
代码一般写在业务层service层(因为1。代码中逻辑需要事务控制 2。调用dao—查询数据)
服务端没有表现层。
客户端的使用
作用:调用服务端,获取服务端的数据---认为服务端是个数据库。(crud)
代码放:dao数据持久层。你就把webservice当成一个数据库来使用就行了。
SOAPUI调试工具的使用
问题:服务端开发完成后如何验证其正确呢?
解决方案
1:写一个客户端。(该客户端并不是为了满足业务需求的,浪费)
2:使用专业的测试工具soapui
下载安装
免费版本(5.x)+收费版本(3.x)
安装后:
介绍:
【提示环境】
需要jdk的配置。
业务测试
新建一个测试项目
填写wsdl的测试地址:
业务测试方式:
响应:
性能(压力、负载)测试
因为Webservice,提供业务服务,该服务容量(能同时并发多少请求)、稳定性。
步骤:
1.构建一个测试用例:模拟一个具体业务,比如我们在用例中输入业务数据,此时,该用例就成为测试用例。
2.根据测试用例,建立压力测试用例
如果过多,说明网络或者该ws服务不稳定。找原因?
- 网络不稳定
- 服务器的问题
重点和小结
- 为什么要用ws?(为什么要用接口业务)
- Jax-ws:服务端的开发和客户端的开发(会写就行,企业中更多用框架开发)
- Webservice相关概念(三要素、理解、优点—跨平台基于xml、应用场景-课后文档)
- Wsdl和soap详解(看的懂),代理工具。
- Webservice的注解(规范wsdl文档,影响客户端代码)
- 支持复杂数据类型(但一般不建议使用复杂类型,不容易跨平台,就传字符串:json或xml)-完整示例
- Soapui的使用(业务测试,压力测试)
扩展::
可以体会使用web(三层架构)来调用web
扩展:webxml.com.cn—》获取mp3复杂数据类型的方式(坑—解析wsdl时会发生-不同的平台wsdl有点差别,java不认。)
必须掌握:
文件---》流:FileInputStream(new File(url))
流---》文件:弄一个输出流(newFile(url)),将输入流写入输出流
WebService第一天的更多相关文章
- webservice第一篇【介绍、Scoket、http调用、wsimport调用】
WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧-. 问题一 如果我们的网站需要提供一个天气预报这样一个需求的话,那我们该怎么做????? 天气预报这么一个 ...
- webservice 第一节 .net SoapHeader验证
在工作中经常用到webservice,在.net 开发中经常用到webservice,在java开发经常用到cxf. 今天闲置没事就介绍下 .net webservice中常用到 soapheader ...
- WebService第一天——概述与入门操作
一.概述 1.是什么 Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些 ...
- vs2010下创建webservice ----第一天(建立项目,以及不连数据库进行加减乘除)
Visual Studio 2010默认采用的框架为.NET Framework4,在这个框架中已找不到直接创建WebService的模板方式了.但VS2010可以创建WebService是毋庸置疑的 ...
- 学习 WebService 第一步:体系结构、三元素SOAP/WSDL/UDDI
原文地址:爱军的博客——WebService简介 一.为什么需要Web Service 笔记: WebService 可以实现 跨(硬件.服务器.开发工具.平台.应用程序.程序语言……)共享数据和应用 ...
- WebService的两种方式Soap和Rest比较
我的读后感:由于第一次接触WebService,对于很多概念不太理解,尤其是看到各个OpenAPI的不同提供方式时,更加疑惑.如google map api采用了AJAX方式,通过javascript ...
- SOAP Webservice和RESTful Webservice
http://blog.sina.com.cn/s/blog_493a845501012566.html REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的 ...
- WebService的两种方式SOAP和REST比较 (转)
我的读后感:由于第一次接触WebService,对于很多概念不太理解,尤其是看到各个OpenAPI的不同提供方式时,更加疑惑.如google map api采用了AJAX方式,通过javascript ...
- webservice 学习笔记
1.webservice的概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的 ...
随机推荐
- 机器学习( Machine Learning)的定义
关于机器学习有两个相关的定义: 1)给计算机赋予没有固定编程的学习能力的研究领域. 2)一种计算机的程序,能从一些任务(T)和性能的度量(P),经验(E)中进行学习.在学习中,任务T的性能P能够随着P ...
- BST 二叉搜索树
定义: 二叉查找树要么是一棵空树,要么是一棵具有如下性质的非空二叉树: 1.若左子树非空,则左子树上的所有结点的关键字值均小于根结点的关键字值. 2.若右子树非空,则右子树上的所有 ...
- Linux环境快速部署Zookeeper集群
一.部署前准备: 1.下载ZooKeeper的安装包: http://zookeeper.apache.org/releases.html 我下载的版本是zookeeper-3.4.9. 2.将下载的 ...
- 回家(洛谷 P1592)
模板题.. 传送门:codevs 1079 思路 :以 Z 为起点 直接跑一边SPFA , 看哪一头母牛距离Z点最近 , 最后找出Z 到 A~Y 的最短路 (因为仅有A~Z有奶牛) #include ...
- spring boot maven 插件
spirng boot 需要使用专用maven插件打包,才能打包.引入如下. <build> <plugins> <plugin> ...
- 一步步优化JVM六:优化吞吐量
如果你已经进行完了前面的步骤了,那么你应该知道这是最后一步了.在这一步里面,你需要测试应用的吞吐量和为了更高的吞吐量而优化JVM. 这一步的输入就是应用的吞吐量性能要求.应用的吞吐量是在应用层面 ...
- 对于行高(line-height)的一些理解
刚一开始学习这个特性的时候,总是出一些当时看起来很奇怪的问题.现在决定重新整理一下.毕竟使用css,十行揉在一起凑出效果是一种使用,知道为什么会有这种效果也是一种使用.我们需要做一些测试,所以首先需要 ...
- Hex Workshop(16进制编辑利器) 6.7.2绿色版
软件名称: Hex Workshop 6.7.2绿色版(16进制编辑利器) 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 1.8MB 图片预览: 软件简介 ...
- Android使用Home键后应用程序重启的问题
正常情况应该是在点击 home 按键后,程序在后台暂停运行,点击 后退键 才会退出应用的,但是今天遇到个问题,点击 home 键后,重新再打开应用却每次都返回应用启动页面,有些莫名其妙,一番googl ...
- robotium如何定位控件?
search类获取当前所有的view,然后根据类型或者文本去筛选,找到view后获取坐标,然后点击坐标.本质都是通过坐标点击.solo.clickonScreen方法,底层调用MotionEvent类 ...