WebService第一天

WebService第一天 java

 

【课程安排】:web

总体安排:2天:面试

第一天:webservice入门,JDK规范和实现:jax-ws,相关概念spring

次日:CXF框架,和spring的集成开发。Hessian的开发。数据库

 

今日安排:(jax-ws)编程

  1. 为何要用ws?
  2. 第一个ws应用(联网,在网上链接已经提供的服务,来获取数据。)
  3. Ws概述(概念、三要素wsdl.soap.uddi)
  4. Jax-ws(sun规范,开发服务端和客户端)
  5. Ws深刻探讨(理解、应用场景)--阅读
  6. WSDL详解(规范)
  7. SOAP详解(规范)
  8. WebService注解
  9. 复杂类型的支持+回顾
  10. 调试工具SOAPUI

 

【学习目标】:json

  1. 理解远程调用的思想
  2. 学会JAX-WS的服务端和客户端的开发(接口的开发和调用)
  3. 调试工具的使用。

 

  1. 为何要用Webservice

Webservice是什么?是一个远程调用技术。api

远程:相对于本地,不是当前应用服务的。服务器

调用:数据交互网络

  1. 原来的数据传输处理方式

原来的都是单机系统,

特色:数据的存储和调用都是透明的。好比数据库的存储方式、类型等。都是知道的、模块之间的调用也是随意的、透明的。

 

  1. 业务需求的问题

1.本身想要,但没有

2.本身有数据,别人想要

 

  1. 如何解决上述问题

  • 开放数据库权限?(在一个机房,是一个单位的不一样系统)
  • U盘拷贝?(高考业务,每一年只查询一次,教育局才有)
  • 本身收集数据?
  • ……

 

  1. 咱们的需求

  1. 能够经过接口的技术来获取数据。

接口的概念:

  1. 须要什么接口呢?

 

之前学过socket技术,就是一种接口技术,它有服务端和客户端,相互传递数据。

咱们须要什么样的呢?

 

  1. 第一个Webservice应用

    1. 业务需求

咱们在本地编写客户端,来调用网络上现成的服务端的ws,获取手机号归属地的信息。

http://www.jisuapi.com/api/

咱们用:http://www.webxml.com.cn/

 

  1. 编写客户端调用远程的手机号归属地信息

 

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.编写客户端调用程序

客户端代码:

运行结果:

 

 

  1. Webservice概述

    1. 什么是Webservice

 

W3C组织对其的定义以下,它是一个软件系统,为了支持跨网络的机器间相互操做交互而设计。Web Service服务一般被定义为一组模块化的API,它们能够经过网络进行调用,来执行远程系统的请求服务。

 

简单的说:WebService即Web服务,它是一种跨编程语言和跨操做系统平台的远程调用技术。

 

  • Web服务:基于HTTP和XML的技术,HTTP是互联网上应用最为普遍的一种网络协议,而XML是跨平台的基础。
  • 跨编程语言和跨操做平台:就是说服务端程序采用java编写,客户端程序则能够采用其余编程语言编写,反之亦然!跨操做系统平台则是指服务端程序和客户端程序能够在不一样的操做系统上运行。
  • 远程调用:就是一台计算机a上的一个程序能够调用到另一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统,商场的POS机转帐调用的转帐方法的代码实际上是跑在银行服务器上。再好比,amazon,天气预报系统,淘宝网,校内网,百度等把本身的系统服务以webservice服务的形式暴露出来,让第三方网站和程序能够调用这些服务功能,这样扩展了本身系统的市场占有率

 

提示:市面上接口应用的技术不少,不止是webservice。

 

web Service:有两大类:

一类:传统的webservice,大web service,相对复杂。

一类:轻量级的webservice

 

  1. 前世此生

 

 

  1. 三要素(面试)

WebService的三要素是:

  • SOAP (Simple Object Access Protocol):简易对象访问协议,soap用来描述传递信息的格式。
  • WSDL (WebServices Description Language):Web服务描述语言,用来描述如何访问具体的接口。
  • UDDI (Universal Description Discovery and Integration):通用描述、发现及整合,用来管理、分发、查询webService。

 

UDDI:

 

弱化uddi,缘由:如今的接口交互,通常服务方和调用方直接商量。

 

 

  1. Jax-WS的快速入门

 

  1. Jax-WS是什么

 

  1. 解读说明书

白皮书:《JAX-WS.pdf.pdf》

 

  1. 服务端的开发

 

1.先编写sei(接口和实现类)

接口

实现类:

 

2.加注解

最基本的注解,在实现类上加@Webservice,该类就变成Webservice的服务类了。

3.发布服务

api:

 

 

测试一下是否发布成功:

方法就是经过访问ws的说明书wsdl,看是否能显示。

访问的格式:Webservice地址+?wsdl

 

【扩展】

如何在Windows下查看端口占用状况:

 

  1. 客户端的开发

 

1.创建一个客户端的工程

2.经过wsimport命令+wsdl文档,获取客户端java程序(stub桩,本地代理接口类实例)

 

wsimport是jdk自带的命令。

 

在cmd中输入命令和参数:

将生成的代码(桩    )直接拷贝到工程中

    

3.编写客户端调用代码:

 

缺点:代码过分耦合生成的代码。代码不灵活。

 

 

  1. 客户端的开发-优化

问题:客户端的代码耦合到生成的代码中了(好比访问的服务端地址等,不便于移植)

经过分析Servcie类不能new:

 

新建一个客户端:

 

客户端代码:

 

 

  1. WebService技术深刻探讨

    1. 理解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协议还必须与平台和编程语言无关。

 

  1. 优势

 

优势(摘自百度百科):

  • 可扩展的。SOAP 无需中断已有的应用程序, SOAP 客户端、 服务器和协议自身都能发展。并且SOAP 能极好地支持中间介质和层次化的体系结构。
  • 简单的。客户端发送一个请求,调用相应的对象, 而后服务器返回结果。这些消息是XML 格式的,而且封装成符合HTTP 协议的消息。所以,它符合任何路由器、 防火墙或代理服务器的要求。
  • 彻底和厂商无关。SOAP能够相对于平台、 操做系统、 目标模型和编程语言独立实现。另外,传输和语言绑定以及数据编码的参数选择都是由具体的实现决定的。
  • 与编程语言无关。SOAP 可使用任何语言来完成,只要客户端发送正确SOAP 请求( 也就是说, 传递一个合适的参数给一个实际的远端服务器)。SOAP 没有对象模型,应用程序能够捆绑在任何对象模型中。
  • 与平台无关。SOAP 能够在任何操做系统中无需改动正常运行。

 

  1. 应用场景

WebService是一门新兴和有前途的技术,企业中应用愈来愈普遍。

 

建议使用:

不建议使用:

 

你们能够看一下课前资料:

 

  1. 平台技术构成

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的概念和内容:

  1. WSDL说明书详解

    1. 什么是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

 

  1. wsdl的基本结构

w3c中规定:

注意:规范和实现仍是有少量差异的。:java的服务端生成的wsdl和.net生成的会有少量差距。

 

  1. wsdl的阅读(看懂便可)

从下往上阅读

 

  1. Service服务视图

描述Webservice服务的一些信息,名称、地址、提供的服务端点等

 

 

  1. Binding:绑定

描述端口的一些传输协议等

 

  1. PortType:端口类型

做用:描述Webservice服务的具体服务操做(方法)

 

  1. message:消息

描述,请求或响应的数据内容

  1. type:数据类型

描述参数的类型、个数等

 

【了解】

wsimport客户端生成桩是根据wsdl文件生成的。

问题:客户端是从服务端直接拉取下来的代码吗?

不是!!!!!!!客户端根本就不知道服务端的代码怎么写的。

 

  1. 离线wsdl

在线解析:

但有时候,须要离线解析。

场景:你开发客户端的时候,不能和服务端网络链接。但程序还要开发,经过分析发现,客户端开发主要有wsdl的文档就能够了。由于有该文档,就能够生成桩(客户端代码)。

所以咱们能够将wsdl保存下来,在不能访问服务端的状况下使用。

 

等开发完成,再将客户端程序拿到能访问到服务端的环境中测试。

 

  1. SOAP协议详解

 

  1. 什么是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

 

  1. SOAP、Http、TCP/IP之间的关系—了解

打个比方:

 

SOAP协议,其实不仅是ws使用,邮件smtp传输协议也是这个。

 

  1. 代理工具TCP/IP Monitor

 

代理的基本原理:

 

eclipse内置的插件代理工具:

配置方法:

启动代理:

 

 

 

  1. SOAP1.1协议分析

使用:直接将客户端调用的端口改为代理服务器的端口:

再次访问,在代理服务器上看传输的消息。

 

请求报文:

响应:

 

 

  1. SOAP消息的标准格式

消息的传递至关于一个信封。

信封头(皮)(报头):地址,收件人。。

信纸:(报文):具体的业务信息内容

 

完整结构:

 

  1. SOAP1.2协议分析

更改服务端的soap版本

启动服务,报错:

说明少包,无法生成soap1。2协议的wsdl。

该包支持soap1。2的服务。

将lib中的jar所有导入到工程中,引入类路径。

请求消息:

响应的:

  1. 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. 尽可能使用同版本的来相互调用,缘由,兼容性好,性能高。
  2. 若是服务端使用1。1,那么客户端只能使用1。1,但服务端使用1。2,那么客户端可使用1。1或1。2。,优先用1。2。但国内,不少客户端的开发为了适应不一样版本的服务端,会用1。1来开发。

 

jax-ws客户端会自动适应服务端的版本,没法演示。明天用cxf来演示。

 

  1. Webservice注解(重要)

    1. 为何要用注解

 

反过来讲:只要使用了注解,那么服务端的代码怎么改其实都对wsdl或客户端没有影响。

 

好处:屏蔽了服务端的代码的具体内容。

 

  1. 常见ws注解的分类和使用

    1. 类上面的注解

  1. 方法上面的注解

 

【推荐工具】

文件比较工具。

  1. Webservice的方法的编写要求和方法隐藏

Webservice的sei的方法的要求:

 

 

  1. 复杂数据类型的支持+JaxWS回顾小结

    1. 诉求(需求)

 

 

  1. 服务端

 

 

1.新建项目:

 

2.服务端:

编写步骤:

  1. sei(接口和实现类)

实现类:

 

  1. 加注解

提示:1。2的协议须要导入扩展包

 

  1. 发布

 

测试:

访问wsdl:

 

看版本:

1。1

1。2

 

复杂返回对象

 

 

 

  1. 客户端

 

1)使用wsimport命令生成桩

添加参数支持1。2的桩的生成:

将其拷贝到工程中

 

2)编写客户端代码

 

小结:ws支持简单的对象传输(一般是字符串),也支持复杂对象的传输,甚至mp3音乐、图片。

【课后扩展选做】

提示:

会文件流的操做,就能够作这个功能。

 

  1. 关于Webservice的传输数据方式

一般,实际业务开发过程当中,为了保证ws真正跨平台、跨语言,通常传递字符串。通常该字符串,使用xml或者json表示。不管复杂,仍是简单的数据,均可以用其表示!

这样设计以后,工做量会转换到组装和解析xml和json上面了,可能有大量的业务逻辑。

 

列表:

"[{},{},{},{}]"

如今企业对接口开发的思想:简化接口的开发难度,难度转移到业务上(解析和封装json上了)

 

  1. 开发角度上的使用

服务端的使用

做用:发布一个服务,给别人用—提供数据(l相似于数据库了)

代码通常写在业务层service层(由于1。代码中逻辑须要事务控制 2。调用dao—查询数据)

服务端没有表现层。

 

客户端的使用

做用:调用服务端,获取服务端的数据---认为服务端是个数据库。(crud)

代码放:dao数据持久层。你就把webservice当成一个数据库来使用就好了。

 

 

  1. SOAPUI调试工具的使用

 

问题:服务端开发完成后如何验证其正确呢?

解决方案

1:写一个客户端。(该客户端并非为了知足业务需求的,浪费)

2:使用专业的测试工具soapui

 

  1. 下载安装

免费版本(5.x)+收费版本(3.x)

安装后:

 

介绍:

 

【提示环境】

须要jdk的配置。

 

 

 

 

  1. 业务测试

 

新建一个测试项目

填写wsdl的测试地址:

业务测试方式:

响应:

 

 

  1. 性能(压力、负载)测试

由于Webservice,提供业务服务,该服务容量(能同时并发多少请求)、稳定性。

 

步骤:

1.构建一个测试用例:模拟一个具体业务,好比咱们在用例中输入业务数据,此时,该用例就成为测试用例。

 

2.根据测试用例,创建压力测试用例

 

 

若是过多,说明网络或者该ws服务不稳定。找缘由?

  1. 网络不稳定
  2. 服务器的问题

 

 

  1. 重点和小结

  1. 为何要用ws?(为何要用接口业务)
  2. Jax-ws:服务端的开发和客户端的开发(会写就行,企业中更多用框架开发)
  3. Webservice相关概念(三要素、理解、优势—跨平台基于xml、应用场景-课后文档)
  4. Wsdl和soap详解(看的懂),代理工具。
  5. Webservice的注解(规范wsdl文档,影响客户端代码)
  6. 支持复杂数据类型(但通常不建议使用复杂类型,不容易跨平台,就传字符串:json或xml)-完整示例
  7. Soapui的使用(业务测试,压力测试)

 

扩展::

能够体会使用web(三层架构)来调用web

扩展:webxml.com.cn—》获取mp3复杂数据类型的方式(坑—解析wsdl时会发生-不一样的平台wsdl有点差异,java不认。)

 

必须掌握:

文件---》流:FileInputStream(new File(url))

流---》文件:弄一个输出流(newFile(url)),将输入流写入输出流

相关文章
相关标签/搜索