您好,欢迎来到星星旅游。
搜索
您的当前位置:首页WebService学习笔记

WebService学习笔记

来源:星星旅游


WebService学习笔记 学习笔记——WebService

第1 页 总共10 页

学习笔记

WebService

2013-3-31

李海全学习笔记——WebService

1.WebService 能做什么?

1.1 简单的网络应用

1.2 什么是服务

现在的应用程序变得越来越复杂,甚至只靠单一的应用程序无法完成全部的工作。更别

说只使用一种语言了。 大家在写应用程序查询数据库时,并没有考虑过为什么可以将查询结果返回给上层的应

用程序,甚至认为,这就是数据库应该做的,其实不然,这是数据库通过TCP/IP 协议 与另一个应用程序进行交流的结果,而上层是什么样的应用程序,是用什么语言,数据 库本身并不知道,它只知道接收到了一份协议,这就是SQL92 查询标准协议。 目前的云计算、云查杀都是一种服务,现在比较流行的说法是SOA(面向服务的框架)。 既然数据库可以依据某些标准对外部其他应用程序提供服务、而且不关心对方使用什么

语言,那我们为什么就不能实现跨平台、跨语言的服务呢?

只要我们用Java 写的代码,可以被任意的语言所调用,我们就实现了跨平台,跨语言

的服务!

第2 页 总共10 页

1.3 复杂的网络应用

李海全学习笔记——WebService

1.4 几个名词

 名词1:XML.ExtensibleMarkupLanguage -扩展性标记语言

· XML,用于传输格式化的数据,是Web 服务的基础。

· namespace-命名空间。

· xmlns=“http://itcast.cn” 使用默认命名空间。

· xmlns:itcast=“http://itcast.cn”使用指定名称的命名空间。

 名词2:WSDL–WebServiceDescriptionLanguage–Web 服务描述语言。

· 通过XML 形式说明服务在什么地方-地址。

· 通过XML 形式说明服务提供什么样的方法– 如何调用。

 名词3:SOAP-SimpleObjectAccessProtocol(简单对象访问协议)

· SOAP 作为一个基于XML 语言的协议用于有网上传输数据。 · SOAP= 在HTTP 的基础上+XML 数据。

· SOAP 是基于HTTP 的。

· SOAP 的组成如下:

· Envelope– 必须的部分。以XML 的根元素出现。 · Headers– 可选的。

· Body– 必须的。在body 部分,包含要执行的服务器的方法。

和发送到服务器的数据。

1.5WSDL,SOAP 的格式

1)WSDL-说明服务在哪里,如何调用,其实就是一个使用说明书

第3 页 总共10 页

李海全学习笔记——WebService

2)SOAP 协议的范本:-请求示例:

 以下发出HTTP 请求,但不同的是向服务器发送的是XML 数据!

1、因为是在HTTP 上发数据, 所以必须先遵循HTTP 协议 2、XML 部分即SOAP 协议,必须包含 Envelope 元素和Body 元素。

SOAP 协议:-响应示例:

 响应的信息,同发送信息一样,先必须是HTTP 协议,然后再遵循SOAP 协议。

第4 页 总共10 页

李海全学习笔记——WebService

2.使用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 (service endpointinterface),并提供相关的实现,通过调用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 页

2.2 代码

packagecom.cdut.ws; importjavax.jws.WebService; importjavax.xml.ws.Endpoint; /**www.mwcly.cn *WebService * 将Java类标记为WebService,或者将Java接口标记为WebService *@author李海全 * */ @WebService//注意只有此一个注解,此注解也是必须的,默认的SOAP消息风格 为:DOCUMENT publicclassHelloService{ 李海全学习笔记——WebService

publicStringsayHello(Stringname){ return\"hello\"+name; }

publicstaticvoidmain(String[]args){ //参数1:WebService发布地址 //参数2:服务的实现者 Endpoint.publish(\"http://127.0.0.1:67/hello\",new HelloService()); } }

步骤:

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 调用WebService

2.3.1 服务发布成功了,如何调用呢?请看说明书-WSDL:

在地址栏输入(注意后面的参数?wsdl)http://127.0.0.1:9999/helloworld?wsdl

目前不是访问webService,只是获取一个用于描述WebService 的说明文件,即:wsdl 文件. wsdl-WebService

DescriptionLanguage,是以XML 文件形式来描述WebService 的”说明书”,

有了说明书,我们才可以知道如何使用或是调用这个服务

2.3.2 使用wsimport 生成本地调用代码:

1:可以通过java–version 检查你当前的版本号.如果版本太低可以安装高版本的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_21\\bin;%PATH%(回车即可)

再通过java–version 查看jdk 的版本号是否已经发生变化.

2:转到一个相对干净的目录下,我在d 盘上新建立一个目录名为:ws,并转到此目录下. 3:开启你的webService. 4:输入以下命令:

wsimport–s.http://127.0.0.1:67/hello?wsdl

参数说明:-s 是指编译出源代码文件,后面的.(点)指將代碼放到當前目錄下. 最后面的http….是指获取wsdl 说明书的地址.

5:此时,将生成.java 文件和.class 文件.(都包含原始包名).将代码Copy 到你的项目中.(只拷贝 java 文件)

6:在新的项目中,新一个类,(可位于任意包下),对上面生成的代码进行调用,见下一页ppt. 7:wsimport 其他参数说明,我们经常使用的参数为-d,-s,-p -d<目录>将会生成.class 文件.

示例:wsimport–d.http://127.0.0.1:67/hello?wsdl -s<目录>将会生成.java 文件.

示例:wsimport–s.http://127.0.0.1:67/hello?wsdl

-p<包名>将生成的文件(.java 或是.class 修改成指定的包名)

第7 页 总共10 页

李海全学习笔记——WebService

示例:wsimport-s.-pcom.beijing.itcasthttp://127.0.0.1:67/hello?wsdl

对于-p 参数,注意包名的修改,它将所生成类,全部置于通过-p 指定的包下.(演示)

需要说明的是,当仅使用-p 参数时,它也将同时使用-d 即编译成.class 文件.–d 参数写或不写, 它都在那里,不离不弃.

注意:-s 不能分开,-s 后面有个小点,用于指定源代码生成的目录。点即当前目录。 如果使用了-s 参数则会在目录下生成两份代码,一份为.class 代码。一份为.java 代码。 .class 代码,可以经过打包以后使用。.java 代码可以直接Copy 到我们的项目中运行。 2.3.4 使用说明书WSDL

2.3.5 调用代码

packagecom.cdut.ws; /**www.huaihua365.net * 通过调用生成的类,来调用远程代码 *@author 李海全 */ publicclassApp{

publicstaticvoidmain(String[]args){ //从HelloServiceService的getHelloWorldPort方法中返回调用接口 HelloServiceservice=new HelloServiceService().getHelloServicePort();

//执行调用 Stringret=service.sayHello(\"**\"); 第8 页 总共10 页

} 李海全学习笔记——WebService

System.out.println(ret); }

2.4 例子:通过WebService 获取天气信息

1.打开网址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl 直接使用wsimport 通过该地址生存java 文件时,会报错。因为该wsdl 里面包含ref= \"s:schema\" 这样的引用。

2.将该网页另存为“WeatherWebService.wsdl”文件。 3.运用wsimport 命令:

wsimport-s.file:/f:/WeatherWebService.wsdl

将打开该文件,将出错的地方删除

4.再运行该命令,生成以下代码

5.编写客户端,将生成文件拷贝到工程中 importcn.com.webxml.ArrayOfString; importcn.com.webxml.WeatherWebService; importcn.com.webxml.WeatherWebServiceSoap;

第9 页 总共10 页

publicclassRunMain{ publicstaticvoidmain(String[]args){ WeatherWebServicewws=newWeatherWebService(); WeatherWebServiceSoapwwsp=wws.getWeatherWebServiceSoap(); 李海全学习笔记——WebService

ArrayOfStringaos=wwsp.getWeatherbyCityName(\"成都\"); for(Strings:aos.getString()){ System.out.println(s); }

}

} 6.结果

第10 页 总共10 页

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- stra.cn 版权所有 赣ICP备2024042791号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务