WebService第一天 java
【课程安排】:web
总体安排:2天:面试
第一天:webservice入门,JDK规范和实现:jax-ws,相关概念spring
次日:CXF框架,和spring的集成开发。Hessian的开发。数据库
今日安排:(jax-ws)编程
【学习目标】:json
Webservice是什么?是一个远程调用技术。api
远程:相对于本地,不是当前应用服务的。服务器
调用:数据交互。网络
原来的都是单机系统,
特色:数据的存储和调用都是透明的。好比数据库的存储方式、类型等。都是知道的、模块之间的调用也是随意的、透明的。
1.本身想要,但没有
2.本身有数据,别人想要
接口的概念:
之前学过socket技术,就是一种接口技术,它有服务端和客户端,相互传递数据。
咱们须要什么样的呢?
咱们在本地编写客户端,来调用网络上现成的服务端的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.编写客户端调用程序
客户端代码:
运行结果:
W3C组织对其的定义以下,它是一个软件系统,为了支持跨网络的机器间相互操做交互而设计。Web Service服务一般被定义为一组模块化的API,它们能够经过网络进行调用,来执行远程系统的请求服务。 |
简单的说:WebService即Web服务,它是一种跨编程语言和跨操做系统平台的远程调用技术。
|
提示:市面上接口应用的技术不少,不止是webservice。
web Service:有两大类:
一类:传统的webservice,大web service,相对复杂。
一类:轻量级的webservice
WebService的三要素是:
UDDI:
弱化uddi,缘由:如今的接口交互,通常服务方和调用方直接商量。 |
白皮书:《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就是一个应用程序向外界暴露出一个能经过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:
比如咱们去商店买东西,首先要知道商店里有什么东西可买,而后再来购买,商家的作法就是张贴广告海报。 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
w3c中规定:
注意:规范和实现仍是有少量差异的。:java的服务端生成的wsdl和.net生成的会有少量差距。
从下往上阅读
描述Webservice服务的一些信息,名称、地址、提供的服务端点等
描述端口的一些传输协议等
做用:描述Webservice服务的具体服务操做(方法)
描述,请求或响应的数据内容
描述参数的类型、个数等
【了解】
wsimport客户端生成桩是根据wsdl文件生成的。
问题:客户端是从服务端直接拉取下来的代码吗?
不是!!!!!!!客户端根本就不知道服务端的代码怎么写的。
在线解析:
但有时候,须要离线解析。
场景:你开发客户端的时候,不能和服务端网络链接。但程序还要开发,经过分析发现,客户端开发主要有wsdl的文档就能够了。由于有该文档,就能够生成桩(客户端代码)。
所以咱们能够将wsdl保存下来,在不能访问服务端的状况下使用。
等开发完成,再将客户端程序拿到能访问到服务端的环境中测试。
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协议,其实不仅是ws使用,邮件smtp传输协议也是这个。
代理的基本原理:
eclipse内置的插件代理工具:
配置方法:
启动代理:
使用:直接将客户端调用的端口改为代理服务器的端口:
再次访问,在代理服务器上看传输的消息。
请求报文:
响应:
消息的传递至关于一个信封。
信封头(皮)(报头):地址,收件人。。
信纸:(报文):具体的业务信息内容
完整结构:
更改服务端的soap版本
启动服务,报错:
说明少包,无法生成soap1。2协议的wsdl。
该包支持soap1。2的服务。
将lib中的jar所有导入到工程中,引入类路径。
请求消息:
响应的:
SOAP1.1和1.2版本之间的大部分差别一般也是能够忽略的
SOAP1.1只能够绑定到HTTP协议,而SOAP1.2除了HTTP协议以外还支持SMTP绑定。在JAX-WS中,相似于大多数框架,SOAP1.1做为默认实现,尽管如此在JAX-WS中能够随时采用SOAP1.2。
应用的价值:
jax-ws客户端会自动适应服务端的版本,没法演示。明天用cxf来演示。
反过来讲:只要使用了注解,那么服务端的代码怎么改其实都对wsdl或客户端没有影响。
好处:屏蔽了服务端的代码的具体内容。
【推荐工具】
文件比较工具。
Webservice的sei的方法的要求:
1.新建项目:
2.服务端:
编写步骤:
实现类:
提示:1。2的协议须要导入扩展包
测试:
访问wsdl:
看版本:
1。1
1。2
复杂返回对象
1)使用wsimport命令生成桩
添加参数支持1。2的桩的生成:
将其拷贝到工程中
2)编写客户端代码
小结:ws支持简单的对象传输(一般是字符串),也支持复杂对象的传输,甚至mp3音乐、图片。
【课后扩展选做】
提示:
会文件流的操做,就能够作这个功能。
一般,实际业务开发过程当中,为了保证ws真正跨平台、跨语言,通常传递字符串。通常该字符串,使用xml或者json表示。不管复杂,仍是简单的数据,均可以用其表示!
这样设计以后,工做量会转换到组装和解析xml和json上面了,可能有大量的业务逻辑。
列表:
"[{},{},{},{}]"
如今企业对接口开发的思想:简化接口的开发难度,难度转移到业务上(解析和封装json上了)
服务端的使用
做用:发布一个服务,给别人用—提供数据(l相似于数据库了)
代码通常写在业务层service层(由于1。代码中逻辑须要事务控制 2。调用dao—查询数据)
服务端没有表现层。
客户端的使用
做用:调用服务端,获取服务端的数据---认为服务端是个数据库。(crud)
代码放:dao数据持久层。你就把webservice当成一个数据库来使用就好了。
问题:服务端开发完成后如何验证其正确呢?
解决方案
1:写一个客户端。(该客户端并非为了知足业务需求的,浪费)
2:使用专业的测试工具soapui
免费版本(5.x)+收费版本(3.x)
安装后:
介绍:
【提示环境】
须要jdk的配置。
新建一个测试项目
填写wsdl的测试地址:
业务测试方式:
响应:
由于Webservice,提供业务服务,该服务容量(能同时并发多少请求)、稳定性。
步骤:
1.构建一个测试用例:模拟一个具体业务,好比咱们在用例中输入业务数据,此时,该用例就成为测试用例。
2.根据测试用例,创建压力测试用例
若是过多,说明网络或者该ws服务不稳定。找缘由?
扩展::
能够体会使用web(三层架构)来调用web
扩展:webxml.com.cn—》获取mp3复杂数据类型的方式(坑—解析wsdl时会发生-不一样的平台wsdl有点差异,java不认。)
必须掌握:
文件---》流:FileInputStream(new File(url))
流---》文件:弄一个输出流(newFile(url)),将输入流写入输出流