webservice12月30号课堂笔记.doc_第1页
webservice12月30号课堂笔记.doc_第2页
webservice12月30号课堂笔记.doc_第3页
webservice12月30号课堂笔记.doc_第4页
webservice12月30号课堂笔记.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Webservice 第一天 jaxws编程方法 综合案例Webservice课程安排:两天课:第一天:什么是webservice?从案例(便民查询网站)分析如何实现?使用socket实现。使用jaxws开发webservice。Webservice三要素Wsdl(webservice使用说明书)重点掌握Soap(jaxws开发webservice的传输协议)重点掌握UDDI(了解)Webservice的使用场景分析(掌握)学会jaxws基本开发方法(重点)Soap1.1和soap1.2区别:跟踪soap协议综合案例:使用webservice传输xml数据(重点掌握)第二天:Jaxws的深入开发:常用注解测试jaxws传输复杂对象类型CXF开发webservice:CXF入门程序Spring+cxf整合(重点)CXF发布rest的webservice。(重点)综合案例:实现便民查询网站1 便民网站分析1.1 需求通过便民网站,查询日常信息。1.2 分析从远程系统中获取信息从远程系统中获取信息气象局天气信息表现层Html,css业务层service移动运营商手机号信息数据层dao数据库,没有天气信息udptcp客户端/服务器模式:服务端气象局移动运营商客户端自己开发便民查询网站远程调用Tcp:是一种传输层协议,是一种面向连接的协议,经过三次握手客户端和服务端连接一个连接(通道)。Tcp传输数据时稳定。Udp:是一种传输层协议,是一种数据报协议,速度是很快的,不稳定的。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去最终采用tcp通信方式,客户端向服务端发起请求,查询天气信息。1.3 Socket实现天气查询1、 jaxws开发webservice和socket对比分析2、 重视socket开发,企业开发后台服务常使用socket。a) 服务端要有可持续运行能力,保证线程一直在运行b) 并发处理能力,要使用多线程1.3.1 分析outputstreaminputstreaminputstreamoutputstream客户端连接socket服务端服务端使用ServerSocket创建socket服务端1.3.2 实现 准备环境:Jdk2Eclipse indigoMysql.2 创建服务端: 创建客户端:1.3.3 小结使用socket传输数据需要程序员关注如何解析数据流。设想,如果可以面向对象开发,直接传输java对象,减轻程序员开发的复杂度。1.4 Java开发webserviceJAVA 中共有三种WebService 规范,分别是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS。1.4.1 Jaxws(掌握)JAX-WS 的全称为 Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API For XML-Remote Procedure Call)目前已经被JAX-WS 规范取代。从java5开始支持JAX-WS2.0版本,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本。Jaxws开发的webservice传输soap协议。1.4.2 JAXM&SAAJ(了解)JAXM(JAVA API For XML Message)主要定义了包含了发送和接收消息所需的API,SAAJ(SOAP With Attachment API For Java,JSR 67)是与JAXM 搭配使用的API,为构建SOAP 包和解析SOAP 包提供了重要的支持,支持附件传输等,JAXM&SAAJ 与JAX-WS 都是基于SOAP 的Web 服务,相比之下JAXM&SAAJ 暴漏了SOAP更多的底层细节,编码比较麻烦,而JAX-WS 更加抽象,隐藏了更多的细节,更加面向对象,实现起来你基本上不需要关心SOAP 的任何细节JAXM&SAAJ 暴漏了SOAP更多的底层细节,编码比较麻烦,JAXM&SAAJ通常不使用。1.4.3 JAX-RS(掌握)JAX-RS 是JAVA 针对REST(Representation State Transfer)风格制定的一套Web 服务规范,由于推出的较晚,该规范(JSR 311,目前JAX-RS 的版本为1.0)并未随JDK1.6 一起发行。Rest定义参考:理解RESTful架构.docx需要大家重视,当前比较流行,因为jax-RS可以发布 rest风格webservice,因为rest的webservice不采用soap传输,直接采用http传输,可以返回xml或json,比较轻量。1.5 Jaxws实现天气查询支持java面向对象开发。1.5.1 服务端定义java接口,提供天所查询方法。 SEI编写SEI(Service Endpoint Interface),SEI在webservice中称为portType,在java中称为接口public interface WeatherInterface /根据 城市名称查询天气信息public String queryWeather(String cityName); SEI实现类 发布webservice服务错误:发布服务,如果服务端口已被暂用报错: 验证webservice服务是否发布成功在webservice的地址后边添加?wsdl,查询webservice的使用说明书内容是否完整,如果wsdl内容完整,表示webservice发布成功。阅读 wsdl方法:Wsdl是xml格式文档。从下往上读。找到service:里边有port,Binding最终通过binding找到portTypeportType有方法,调用webservice就是调用porttype的方法。最终找到porttype,其中有方法,说明 wsdl文档基本上完整。必须存在调用服务类及方法。1.5.2 客户端支持面向对象开发。客户端功能调用webservice,先知道webservice地址:一般情况下,只要知道 wsdl的地址,就可以知道 webservice地址。天气查询服务地址::12345/weather?wsdl 阅读wsdl找到service(服务视图)通过binding找到portType(服务端点) 使用wsimport生成webservice的客户端调用代码Wsimport:是jdk提供的一个工具,作用是根据webservice的wsdl地址生成客户端调用代码。单独创建一个工程wsimport存放生成代码.通过cmd进入工程wsimport目录。生成代码:默认生成的代码所在包名,是wsdl中命名空间的倒序。可以通过wsimport p指定包名。详细参见笔记。 将生成 的代码拷贝到客户端工程中编写客户端程序:2 Webservice与socket的区别(重点理解)Socket:是一种传输层的协议。常用tcp、udp。Socket是操作系统 提供的一套网络接口,不同的编程语言都有实现 。Socket是跨平台的。传输数据时需要程序员自己解析数据流。优点 :传输速度很快。应用场景:如果要考虑传输速度,优先使用SocketWebservice使用soap协议:基于http的应用层协议,http也是应用层协议,基于socket传输数据。http或soap都是跨平台的。soap在http协议的基础上,一个基于XML的协议。不同:都是底层的通信协议,请求包的格式不同而已,soap包是XML格式,http纯文本格式。Jaxws开发Webservice,传输数据库是面向对象方式,不用程序员自己解析数据流。Webservice如何传输数据:Java对象 依据XSD(webservice数据类型标准)将java对象进行序列化成soap协议Java对象客户端服务端因为webservice要经过两次序列化,传输速度不快。缺点:传输速度慢。优点:面向对象 开发,soap协议是一个标准协议,方便进行跨平台、跨公司进行接口开发。应用场景:不考虑传输速度前提下,根据soap标准协议,方便进行接口定义。3 什么是webserviceweb 服务+跨平台+远程调用+soap协议传输数据3.1 定义Webservice即web 服务,是一种跨平台的远程调用技术,基于http的soap协议传输数据,也可以直接使用http传输数据。l Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术。l 采用标准SOAP(Simple Object Access Protocol) 协议传输,soap属于w3c标准。Soap协议是基于http的应用层协议,soap协议传输是xml数据。l 采用wsdl作为描述语言即webservice使用说明书,wsdl属w3c标准。l xml是webservice的跨平台的基础,XML主要的优点在于它既与平台无关,又与厂商无关。l XSD,W3C为webservice制定了一套传输数据类型,使用xml进行描述,即XSD(XML Schema Datatypes),任何编程语言写的webservice接口在发送数据时都要转换成webservice标准的XSD发送。当前非SOAP协议的webService以轻量为首要目标,比如rest webservice也是webservice的一种方式。3.2 webService三要素3.2.1 soapsoap协议是webservice是传输协议,即简单对象访问协议。Soap协议是xml格式,理解为基于http传输xml数据。Soap=http+xml3.2.2 wsdlwsdl是webservice的使用说明书。根据wsdl去如何调用webservice。从下往上读,找到service服务视图,通过binding找到portType(服务类)。3.2.3 UDDI(了解)UDDI是一个目录服务,存储了全球的webservice地址。UDDI旨在将全球的webservcie资源进行共享,促进全球经济合作。3.3 Webservice应用场景单点登陆,将登陆验证接口暴漏出来,可以 以webservice的接口来暴漏。统一来记录用户信息3.3.1 用于分布式应用集成,实现软件重用http、soap系统B系统A系统A和系统B可以通过单点登陆系统进行用户身份认证。单点登陆系统:将用户登陆功能抽取出来,组成一个单独系统,达到软件重用的目标。用户信息可以在单点登陆系统一处存储,系统A和系统B不用记录用户信息,方便有效进行系统集成。3.3.2 建议不用webservice同构程序间通信可以不用webservice,前提是多个同构程序是相同的公司开发的。比如:一个公司作了两个程序,都 是java,采用java提供一个远程调用技术,RMI。RMI 指的是远程方法调用 (Remote Method Invocation)。RMI基于socket传输数据,支持面向对象,要比soap协议传输快。SocketRMIsoap3.3.3 建议使用webservicel 公开接口:在互联网发布服务接口,不考虑客户端的类型,使用webservice发布服务。因为webservice基于soap协议(w3c标准协议),所以使用soap发布服务。l 调用webservice服务端由于webservice服务端已确定,作为客户端别无选择。3.4 Webservice优缺点3.4.1 优点:1 、采用xml支持跨平台远程调用。2、基于http的soap协议,可跨越防火墙。(因为SOAP一般使用HTTP协议,而服务器的这个协议一般都是开放的,而且是可以穿过防火墙的)3、支持面向对象开发。4、有利于软件和数据重用,实现松耦合。3.4.2 缺点:1、 由于soap是基于xml传输,本身使用xml传输会传输一些无关的东西从而效率不高,随着soap协议的完善,soap协议增加了许多内容,这样就导致了使用soap协议去完成简单的数据传输的效率不高。如果直接用http传输自定义数据内容比webservice开发更快捷,例如第三方支付公司的支持接口。3.5 小结Webservice是基于http发布web 服务,可以采用soap协议作为传输数据格式,也可以直接使用http传输数据,比如rest方式。3.6 再谈socket和webservice应用场景Socket:优点:传输速度快缺点:需要手动解析数据流,如果用socket传输数据需要接口双方定义接口协议格式(传什么格式xml,传什么json?),自定义协议,不方便进行接口开发。场景:要考虑传输速度,优先使用socket,但是需要自定义协议(接口双方定义一个传输的数据格式)。Socket开发:注意:socket服务可持续性,高并发性。Webservice:优点:采用标准soap协议,接口双方只要遵循标准协议开发使用接口。通过wsdl知道接口内容。方便进行接口开发。缺点:传输速度慢。场景:公开接口,在不考虑客户端类型或传输性能,接口面向整个互联网,优先考虑webservice。Webservice性能差的原因:如果传输soap经过两次对象序列化,webservice的性能依赖中间件的性能。4 wsdl4.1 定义WSDL 指网络服务描述语言(Web Services Description Language)。WSDL是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。WSDL 是一种 XML 文档WSDL 用于描述网络服务WSDL 也可用于定位网络服务通过wsdl知道webservice如何调用。4.2 说明书结构从下往上读: 服务视图,webservice的服务结点,它包括了服务端点 为每个服务端点定义消息格式和协议细节 服务端点,描述 web service可被执行的操作方法,以及相关的消息,通过binding指向portType 定义一个操作(方法)的数据参数(可有多个参数) 定义 web service 使用的全部数据类型4.3 公网天气查询开发只需要开发查询公网天气客户端4.3.1 阅读 wsdlService服务视图:portType服务端点:4.3.2 使用wsimport生成客户端调用代码需要知道wsdl的地址。Wsimport不支持soap1.2的客户端代码生成。4.3.3 将生成代码拷贝到工程中,开发客户端使用客户端生成代码调用服务端:4.3.4 小结使用客户端生成的代码调用服务端,缺点:将webservice的地址封装在生成代码中,如果将来webservice地址改变,需要重新生成,修改客户端调用代码。不方便系统维护。5 上午课程回顾什么是webservice?Webservice即web服务,基于http的soap 协议传输,也可以只基于http传输数据。什么是Wsdl?Wsdl就是网络服务的描述语言,即webservice的使用说明书。从下往上读:先找到service服务视图再通过binding找到portType找到portType中的服务方法Jaxws开发webservice步骤:服务端开发:定义SEI(service endpoint interface)服务端点,即portType,在java中是接口定义SEI的实现类,类上边使用webservice注解标记它是一个webservice服务类。发布服务:/第一个参数:webservice的地址/第二个参数:使用webService标记的服务对象Endpoint.publish(:12345/weather, new WeatherInterfaceImpl();客户端开发:第一种方法:使用客户端生成代码调用webservice。第一步:Wsimport根据 wsdl生成客户端调用代码第二步:将生成的代码拷贝到工程中编写客户端代码1 创建Service服务视图2 通过服务视图得到portType3 调用portType方法此方法缺点:将webservice的地址在生成代码写死 了,如果webservice地址变更需要重新生成代码。系统维护不方便。6 客户端开发第二种方法Jaxws标准方法:6.1 使用jdk的service类调用webservice。6.2 使用jaxws标准方法调用公网天气查询:6.3 小结使用jaxws标准方法调用webservice可以指定webservice地调用地址,比通过生成代码调用webservice要灵活!7 soap7.1 定义soap,简单对象访问协议,基于http传输xml数据,soap协议体是xml格式。SOAP 是一种网络通信协议SOAP即Simple Object Access Protocol简易对象访问协议SOAP 用于跨平台应用程序之间的通信SOAP 被设计用来通过因特网(http)进行通信SOAP HTTP+XML,其实就是通过HTTP发xml数据SOAP 很简单并可扩展支持面向对象SOAP 允许您跨越防火墙SOAP 将被作为 W3C 标准来发展7.2 使用TCP/IP Monitor监视Soap协议7.2.1 TCP/IP Monitor配置TCP/IP Monitor:是eclipse自带的一个工具,通过代理的方法监视tcp协议内容。通过TCP/IP Monitor监视soap协议内容。TCP/IP Monitor代理,将客户端请求转发给服务端Webservice服务端Webservice客户端TCP/IP Monitor配置:7.2.2 测试:编写webservice客户端,向代理端口中发送数据。地址::54321/weather?wsdl客户端请求的soap协议内容:POST /weather HTTP/1.1Accept: text/xml, multipart/relatedContent-Type: text/xml; charset=utf-8SOAPAction: /WeatherInterfaceImpl/queryWeatherRequestUser-Agent: JAX-WS RI 2.2.4-b01Host: :54321Connection: keep-aliveContent-Length: 226Soap协议体内容:Xml格式。郑州响应内容:HTTP/1.1 200 OKTransfer-encoding: chunkedContent-type: text/xml; charset=utf-8Date: Tue, 30 Dec 2014 06:40:50 GMT晴7.2.3 Soap协议体内容必需有 Envelope 元素,此元素将整个 XML 文档标识为一条 SOAP 消息可选的 Header 元素,包含头部信息必需有Body 元素,包含所有的调用和响应信息 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息 . . . . . . Soap协议常用1.1和1.2两个版本。7.3 通过http发送soap协议体(xml)7.3.1 思路 模拟一个http的客户端(相当于一个浏览器),客户端通过程序实现,向webservice的服务端发送soap协议(xml)。http客户端意义(掌握):在企业开发中,很多都 是http接口,需要写程序模拟http请求,请求数据解析数据。7.3.2 实现/开启 一个http链接/webservice地址URL url = new URL(:12345/weather);HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();/设置post请求,post是大写httpURLConnection.setRequestMethod(POST);/Content-Type: text/xml; charset=utf-8httpURLConnection.setRequestProperty(Content-Type, text/xml; charset=utf-8);/设置请求和响应httpURLConnection.setDoInput(true);httpURLConnection.setDoOutput(true);String requestString = requestString(郑州);/发送soap协议httpURLConnection.getOutputStream().write(requestString.getBytes();/接收响应内容InputStream inputStream = httpURLConnection.getInputStream();ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();int len=-1;byte b = new byte1024;/将inputStream内容写到byteArrayOutputStreamwhile(len= inputStream.read(b, 0, 1024)!=-1)byteArrayOutputStream.write(b, 0, len);/获取响应内容 String responseString = byteArrayOutputStream.toString();System.out.println(responseString);/解析响应的xml数据。/.inputStream.close();byteArrayOutputStream.close();7.3.3 课后作业上网查找 httpclient的使用方法:/Httpclient就是模拟http的请求,在企业开发中通过httpclient向http服务端请求,获取接口内容。7.3.4 Soap1.2协议测试如何将service类发布soap1.2:在SEI实现类上添加如下注解BindingType(javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING)Soap1.2要发布,需要下载扩展包:Jaxws实现soap1.2需要加入jaxws扩展包,从sun下载jaxws-ri-2.2.8,解压jaxws-ri-2.2.8并将lib下的jar包加载到java工程中。修改service代码:Wsdl内容,有soap12前缀:soap1.2请求和响应:请求内容:POST /weather HTTP/1.1Accept: application/soap+xml, multipart/relatedContent-Type: application/soap+xml; charset=utf-8;action=/WeatherInterfaceImpl/queryWeatherRequestUser-Agent: JAX-WS RI 2.2.4-b01Host: :54321Connection: keep-aliveContent-Length: 224郑州响应内容:HTTP/1.1 200 OKTransfer-encoding: chunkedContent-type: application/soap+xml; charset=utf-8Date: Tue, 30 Dec 2014 07:39:51 GMT晴7.3.5 Soap1.1和soap1.2对比Soap1.1版本:通过http进行post请求。Content-Type: text/xml; charset=utf-8Soap1.1命名空间:/soap/envelope/Soap1.2版本:Post请求Content-Type: application/soap+xml;soap1.2命名空间:/2003/05/soap-envelopesoap1.1的服务端需要soap11客户端调用soap1.2的服务端soap1.1客户端和soap1.2客户端都 可以调用。8 Webservice客户端开发方法总结8.1 使用客户端生成代码方法第一步:使用wsimport或其它工具(比如cxf的wsdl2java)生成客户端的调用第二步:使用生成代码调用webservice服务端使用生成的service服务视图类创建服务视图对象调用service服务对象的getPortXXX方法得到portType。/创建服务视图对象WeatherInterfaceImplService weatherInterfaceImplService =new WeatherInterfaceImplService();/通过服务视图得到portType(接口类型)WeatherInterfaceImpl weatherInterfaceImpl = weatherInterfaceImplService.getWeatherInterfaceImplPort();/调用webservice方法String result = weatherInterfaceImpl.queryWeather(郑州);8.2 使用jaxws标准方法(Service类)(推荐使用)第一步:使用wsimport或其它工具(比如cxf的wsdl2java)生成客户端的调用第二步:使用url、qname、service调用服务端/wsdl的路径URL wsdlDocumentLocation = new URL(:54321/weather?wsdl);/从wsdl中找到服务视图/第一个参数:wsdl的命名空间/第二个参数:服务视图名称QName serviceName = new QName(/, WeatherInterfaceImplService);/第一步使用Service创建服务视图Service service =Service.create(wsdlDocumentLocation, serviceName);/从服务视图得到portType对象/参数:portTypeWeatherInterfaceImpl weatherInterfaceImpl = service.getPort(WeatherInterfaceImpl.class);8.3 模拟http客户端调用webservice服务(掌握)使用HttpURLConnection或apache的Httpclient模拟http请求,调用webservice。注意:使用此方法不需要生成客户端调用代码。9 webservice案例(webservice发送xml)9.1 目标企业

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论