WebService学习笔记.docx

上传人:b****7 文档编号:23687371 上传时间:2023-05-19 格式:DOCX 页数:25 大小:425.55KB
下载 相关 举报
WebService学习笔记.docx_第1页
第1页 / 共25页
WebService学习笔记.docx_第2页
第2页 / 共25页
WebService学习笔记.docx_第3页
第3页 / 共25页
WebService学习笔记.docx_第4页
第4页 / 共25页
WebService学习笔记.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

WebService学习笔记.docx

《WebService学习笔记.docx》由会员分享,可在线阅读,更多相关《WebService学习笔记.docx(25页珍藏版)》请在冰豆网上搜索。

WebService学习笔记.docx

WebService学习笔记

 

学习笔记WebService

 

WebService学习笔记

 

学习笔记

WebService

 

2013-3-31

 

第1页总共10页

 

李海全学习笔记WebService

 

1.WebService能做什么?

 

1.1简单的网络应用

 

1.2什么是服务

 

 

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

更别

说只使用一种语言了。

大家在写应用程序查询数据库时,并没有考虑过为什么可以将查询结果返回给上层的应

用程序,甚至认为,这就是数据库应该做的,其实不然,这是数据库通过TCP/IP协议

与另一个应用程序进行交流的结果,而上层是什么样的应用程序,是用什么语言,数据

库本身并不知道,它只知道接收到了一份协议,这就是SQL92查询标准协议。

目前的云计算、云查杀都是一种服务,现在比较流行的说法是SOA(面向服务的框架)。

既然数据库可以依据某些标准对外部其他应用程序提供服务、而且不关心对方使用什么

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

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

的服务!

 

第2页总共10页

 

李海全学习笔记WebService

 

1.3复杂的网络应用

 

1.4几个名词

 

●名词1:

XML.ExtensibleMarkupLanguage-扩展性标记语言

·

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

·

namespace-命名空间。

·

·

xmlns=“”使用默认命名空间。

xmlns:

itcast=“”使用指定名称的命名空间。

●名词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页

 

李海全学习笔记WebService

 

2.2代码

packagecom.cdut.ws;

 

importjavax.jws.WebService;

importjavax.xml.ws.Endpoint;

 

/**

*WebService

*将Java类标记为WebService,或者将Java接口标记为WebService

*@author李海全

*

*/

@WebService//注意只有此一个注解,此注解也是必须的,默认的SOAP消息风格

为:

DOCUMENT

publicclassHelloService{

 

publicStringsayHello(Stringname){

return"hello"+name;

}

 

publicstaticvoidmain(String[]args){

 

//参数1:

WebService发布地址

//参数2:

服务的实现者

Endpoint.publish("http:

//127.0.0.1:

6789/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:

6789/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:

6789/hello?

wsdl

-s<目录>将会生成.java文件.

示例:

wsimport–s.http:

//127.0.0.1:

6789/hello?

wsdl

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

第7页总共10页

 

李海全学习笔记WebService

示例:

wsimport-s.-pcom.beijing.itcasthttp:

//127.0.0.1:

6789/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;

 

/**

*通过调用生成的类,来调用远程代码

*@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.打开网址:

直接使用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页

 

李海全学习笔记WebService

 

publicclassRunMain{

 

publicstaticvoidmain(String[]args){

WeatherWebServicewws=newWeatherWebService();

WeatherWebServiceSoapwwsp=wws.getWeatherWebServiceSoap();

 

ArrayOfStringaos=wwsp.getWeatherbyCityName("成都");

 

for(Strings:

aos.getString()){

System.out.println(s);

}

 

}

}

 

6.结果

 

第10页总共10页

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 水产渔业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1