WebService学习笔记.doc_第1页
WebService学习笔记.doc_第2页
WebService学习笔记.doc_第3页
WebService学习笔记.doc_第4页
WebService学习笔记.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

学习笔记WebService WebService学习笔记 学习笔记WebService2013-3-31第1 页 总共10 页李海全学习笔记WebService1.WebService 能做什么?1.1 简单的网络应用1.2 什么是服务lllll现在的应用程序变得越来越复杂,甚至只靠单一的应用程序无法完成全部的工作。更别说只使用一种语言了。大家在写应用程序查询数据库时,并没有考虑过为什么可以将查询结果返回给上层的应用程序,甚至认为,这就是数据库应该做的,其实不然,这是数据库通过TCP/IP 协议与另一个应用程序进行交流的结果,而上层是什么样的应用程序,是用什么语言,数据库本身并不知道,它只知道接收到了一份协议,这就是SQL92 查询标准协议。目前的云计算、云查杀都是一种服务,现在比较流行的说法是SOA(面向服务的框架)。既然数据库可以依据某些标准对外部其他应用程序提供服务、而且不关心对方使用什么语言,那我们为什么就不能实现跨平台、跨语言的服务呢?只要我们用Java 写的代码,可以被任意的语言所调用,我们就实现了跨平台,跨语言的服务!第2 页 总共10 页李海全学习笔记WebService1.3 复杂的网络应用1.4 几个名词l 名词1:XML.ExtensibleMarkupLanguage 扩展性标记语言XML,用于传输格式化的数据,是Web 服务的基础。namespace-命名空间。xmlns=“” 使用默认命名空间。xmlns:itcast=“”使用指定名称的命名空间。l 名词2:WSDLWebServiceDescriptionLanguageWeb 服务描述语言。通过XML 形式说明服务在什么地方地址。通过XML 形式说明服务提供什么样的方法 如何调用。l 名词3:SOAP-SimpleObjectAccessProtocol(简单对象访问协议)SOAP 作为一个基于XML 语言的协议用于有网上传输数据。SOAP= 在HTTP 的基础上+XML 数据。SOAP 是基于HTTP 的。SOAP 的组成如下:Envelope 必须的部分。以XML 的根元素出现。Headers 可选的。Body 必须的。在body 部分,包含要执行的服务器的方法。和发送到服务器的数据。1.5WSDL,SOAP 的格式1)WSDL说明服务在哪里,如何调用,其实就是一个使用说明书第3 页 总共10 页李海全学习笔记WebService2)SOAP 协议的范本:请求示例:l 以下发出HTTP 请求,但不同的是向服务器发送的是XML 数据!1、因为是在HTTP 上发数据,所以必须先遵循HTTP 协议2、XML 部分即SOAP 协议,必须包含Envelope 元素和Body 元素。SOAP 协议:响应示例:l 响应的信息,同发送信息一样,先必须是HTTP 协议,然后再遵循SOAP 协议。第4 页 总共10 页李海全学习笔记WebService2.使用jdk 发布第一个WebService 服务并调用2.1 介绍JAX(JavaApiforXml)-WS 规范是一组XMLwebservices 的JAVAAPI。JAX-WS 允许开发者可以选择RPC-oriented 或者message-oriented 来实现自己的webservices。在JAX-WS 中,一个远程调用可以转换为一个基于XML 的协议例如SOAP。在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP 消息的代码。JAX-WS 的运行时实现会将这些API 的调用转换成为对应的SOAP 消息。在服务器端,用户只需要通过Java 语言定义远程调用所需要实现的接口SEI (serviceendpointinterface),并提供相关的实现,通过调用JAX-WS 的服务发布接口就可以将其发布为WebService 接口。在客户端,用户可以通过JAX-WS 的API 创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。当然JAX-WS 也提供了一组针对底层消息进行操作的API 调用,你可以通过Dispatch 直接使用SOAP 消息或XML 消息发送请求或者使用Provider 处理SOAP 或XML 消息。通过webservice 所提供的互操作环境,我们可以用JAX-WS 轻松实现JAVA 平台与其他编程环境(.net 等)的互操作。JAX-WS 与JAX-RPC 之间的关系Sun 最开始的webservices 的实现是JAX-RPC1.1(JSR101)。这个实现是基于Java 的RPC,并不完全支持schema 规范,同时没有对Binding 和Parsing 定义标准的实现。JAX-WS2.0(JSR224)是Sun 新的webservices 协议栈,是一个完全基于标准的实现。在binding 层,使用的是theJavaArchitectureforXMLBinding(JAXB,JSR222),在parsing 层,使用的是theStreamingAPIforXML(StAX,JSR173),同时它还完全支持schema 规范。第5 页 总共10 页李海全学习笔记WebService2.2 代码packagecom.cdut.ws;importjavax.jws.WebService;importjavax.xml.ws.Endpoint;/**WebService* 将Java类标记为WebService,或者将Java接口标记为WebService*author李海全*/WebService/注意只有此一个注解,此注解也是必须的,默认的SOAP消息风格为:DOCUMENTpublicclassHelloServicepublicStringsayHello(Stringname)returnhello+name;publicstaticvoidmain(Stringargs)/参数1:WebService发布地址/参数2:服务的实现者Endpoint.publish(:6789/hello,newHelloService();步骤:1) 在类上添加WebService 注解。这是jdk1.6 提供的一个注解。它位于:javax.jws.*包中。2)通过EndPoint(端点服务)发布一个webService。Endpoint 也是jdk 提供的一个专门用于发布服务的类,它的publish 方法接收两个参数,一个是本地的服务地址,二是提供服务的类。它位于javax.xml.ws.*包中。staticEndpoint.publish(Stringaddress,Objectimplementor) 。 在给定地址处针对指定的实现者对象创建并发布端点。stop 方法用于停止服务。EndPoint 发布完成服务以后,将会独立的线程运行。所以,publish 之后的代码,可以正常执行。注意事项:第6 页 总共10 页李海全学习笔记WebService给类添加上WebService 注解后,类中所有的非静态方法都将会对外公布。不支持静态方法,final 方法。如 果 希 望 某 个 方 法( 非static, 非final) 不 对 外 公 开 , 可 以 在 方 法 上 添 加WebMethod(exclude=true),阻止对外公开。如果一个类上,被添加了WebService 注解,则必须此类至少有一个可以公开的方法,否则将会启动失败。2.3 调用WebService2.3.1 服务发布成功了,如何调用呢?请看说明书-WSDL:在地址栏输入(注意后面的参数?wsdl):9999/helloworld?wsdl目前不是访问webService,只是获取一个用于描述WebService 的说明文件,即:wsdl 文件.wsdl-WebServiceDescriptionLanguage,是以XML 文件形式来描述WebService 的”说明书”,有了说明书,我们才可以知道如何使用或是调用这个服务2.3.2 使用wsimport 生成本地调用代码:1:可以通过javaversion 检查你当前的版本号.如果版本太低可以安装高版本的jdk.或直接将别人已安装好的jdk 目录拷贝到你的机器如D:jdk1.6.0_21 目录下.因为以前的环境变量已经设置成以前老版本的jdk 目录,即JAVA_HOME 和PATH 两个环境变量.可以再重新设置一下环境变量为:JAVA_HOME=D:jdk1.6.0_21,path=%JAVA_HOME%bin,重新设置了环境变量后,要重新打开一个doc(命令行)窗口.才生效.如果不想修改原来已经配置好的环境变量,可以命令行窗口输入以下命令,使jdk1.6.0_24 生效:setpath=D:jdk1.6.0_21bin;%PATH%(回车即可)再通过javaversion 查看jdk 的版本号是否已经发生变化.2:转到一个相对干净的目录下,我在d 盘上新建立一个目录名为:ws,并转到此目录下.3:开启你的webService.4:输入以下命令:wsimports.:6789/hello?wsdl参数说明:-s 是指编译出源代码文件,后面的.(点)指將代碼放到當前目錄下.最后面的http.是指获取wsdl 说明书的地址.5:此时,将生成.java 文件和.class 文件.(都包含原始包名).将代码Copy 到你的项目中.(只拷贝java 文件)6:在新的项目中,新一个类,(可位于任意包下),对上面生成的代码进行调用,见下一页ppt.7:wsimport 其他参数说明,我们经常使用的参数为-d,-s,-p-d将会生成.class 文件.示例:wsimportd.:6789/hello?wsdl-s将会生成.java 文件.示例:wsimports.:6789/hello?wsdl-p将生成的文件(.java 或是.class 修改成指定的包名)第7 页 总共10 页李海全学习笔记WebService示例:wsimport-s.-pcom.beijing.itcast:6789/hello?wsdl对于-p 参数,注意包名的修改,它将所生成类,全部置于通过-p 指定的包下.(演示)需要说明的是,当仅使用-p 参数时,它也将同时使用-d 即编译成.class 文件.d 参数写或不写,它都在那里,不离不弃.注意:-s 不能分开,-s 后面有个小点,用于指定源代码生成的目录。点即当前目录。如果使用了-s 参数则会在目录下生成两份代码,一份为.class 代码。一份为.java 代码。.class 代码,可以经过打包以后使用。.java 代码可以直接Copy 到我们的项目中运行。2.3.4 使用说明书WSDL2.3.5 调用代码packagecom.cdut.ws;/** 通过调用生成的类,来调用远程代码*author 李海全*/publicclassApppublicstaticvoidmain(Stringargs)/从HelloServiceService的getHelloWorldPort方法中返回调用接口HelloServiceservice=newHelloServiceService().getHelloServicePort();/执行调用Stringret=service.sayHello(习近平);第8 页 总共10 页李海全学习笔记WebServiceSystem.out.println(ret);2.4 例子:通过WebService 获取天气信息1.打开网址:/WebServices/WeatherWebService.asmx?wsdl直接使用wsimport 通过该地址生存java 文件时,会报错。因为该wsdl 里面包含ref=s:schema 这样的引用。2.将该网页另存为“WeatherWebService.wsdl”文件。3.运用wsimport 命令:wsimport-s.file:/f:/WeatherWebService.wsdl将打开该文件,将出错的地方删除4.再运行该命令,生成以下代码5.编写客户端,将生成文件拷贝到工程中.webxml.ArrayOfString;.webxml.WeatherWebService;.webxml.WeatherWebServiceSoap;第9 页 总共10

温馨提示

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

评论

0/150

提交评论