使用AXIS作为开发环境来体会Web服务的开发过程.docx
- 文档编号:13111996
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:14
- 大小:169.16KB
使用AXIS作为开发环境来体会Web服务的开发过程.docx
《使用AXIS作为开发环境来体会Web服务的开发过程.docx》由会员分享,可在线阅读,更多相关《使用AXIS作为开发环境来体会Web服务的开发过程.docx(14页珍藏版)》请在冰点文库上搜索。
使用AXIS作为开发环境来体会Web服务的开发过程
使用AXIS作为开发环境来体会Web服务的开发过程
本文介绍使用AXIS作为开发环境来体会Web服务的开发过程。
一.介绍
本文并不是想介绍Web服务的原理、系统架构等,我们假设您已经了解了关于Web服务的一些基本的概念、原理等知识。
本文主要是针对那些已经了解Web服务概念,但是还没有亲身体会Web服务所带来令人欢欣鼓舞的特征的开发人员。
在此我们认为你已经具备了Java、XML等基础知识,如果你还有其他开发环境的经验例如VB、VC那是再好不过的了。
1.Web服务
虽然我们并不想详细讲述Web服务的体系结构,但是大概的介绍一下还是有必要的。
Web服务是一种新型的Web应用程序。
不同于其他Web应用程序,它是自适应、自我描述、模块化的应用程序,并可以跨越Web进行发布、定位以及调用。
简单的Web服务可以提供例如天气预报或者航班信息的服务。
一旦部署了Web服务,其他的应用程序就可以发现和调用所部署的服务。
2.AXIS项目
Axis框架来自Apache开放源代码组织,它是基于JAVA语言的最新的SOAP规范(SOAP1.2)和SOAPwithAttachments规范(来自ApacheGroup)的开放源代码实现。
有很多流行的开发工具都使用AXIS作为其实现支持Web服务的功能,例如JBuilder以及著名的EclipseJ2EE插件Lomboz。
AXIS的最新版本是1.1,可以从http:
//ws.apache.org/axis/index.html下载。
下图是AXIS核心引擎的体系结构图:
图1
整个AXIS项目包括以下几个部分:
1.消息流子系统
消息流子系统提供了灵活的消息传递框架,这个消息传递框架包括处理程序、链、序列化程序和反序列化程序。
处理程序是一个处理请求、响应和故障流的对象。
处理程序可被组合在一起成为链,而且可以使用一个灵活的部署描述符来配置这些处理程序的顺序。
2.传输框架子系统
提供了一个传输框架,这个传输框架可以帮助您创建自己的可插式传输发送器和传输侦听器。
3.数据编码子系统
AXIS完全按照XMLSchema规范提供各种数据类型的自动序列化,并且提供功能扩展接口来使用您自己定制的序列化器和反序列化器。
4.其他
AXIS完全支持WSDL以及日志记录、出错以及故障处理机制。
它同时提供一些工具用来讲WSDL文档转换成客户端的调用框架以及根据类来产生WSDL定义文档。
AXIS目前版本支持的标准是:
W3CSOAP1.1和1.2;WSDL1.1;SAAJ1.1(SUN公司:
SOAPwithAttachmentsAPIforJava);JAX-RPC(SUN公司:
JavaAPIforXML-BasedRPC)1.0。
除了前面介绍的AXIS外,本文中还将会用到TOMCAT,这里不再另行介绍。
另外为了演示Web服务真正与开发环境无关以及AXIS产生的是标准的、符合规范的Web服务,我们还将用到微软公司的SOAPTOOLKIT以及微软的开发环境VB和VC来做为Web服务的客户端。
二.环境搭建
由于AXIS本身是基于JAVA语言开发的项目,并且是以Web应用形式发布的,因此它运行时需要一个应用服务器作为支撑。
为了方便我们这里选用的是Tomcat。
由于AXIS本身需要用到处理XML信息的包,所以我们建议使用JDK1.4并安装Tomcat4.1.24。
下面是环境搭建步骤,读取根据自身情况进行安装。
1.安装JDK1.4.1
2.安装Tomcat4.1.24到C:
\Tomcat并验证安装是否成功
3.下载AXIS项目打包文件axis-1_1.zip解压缩后将目录中的webapps目录下的axis子目录拷贝到C:
\Tomcat\webapps下。
4.验证AXIS的安装:
重新启动Tomcat服务器后打开浏览器输入网址http:
//localhost:
8080/axis后应该出现如下图所示页面,点击链接"Validate"来验证Axis所需的几个JAVA包是否齐全。
图2
点击超链接Validate后,AXIS会自动检查所需的每一个JAVA组件,这协组件分为:
必需组件以及可选组件,必须保证所有必需组件都存在,如下图所示即为验证成功。
图3
三.WebService服务端开发
经过了前两步之后我们就可以开始Web服务之旅了!
大多数人在学习一种编程语言的第一步都是从Helloworld程序开始的,我们也不例外。
我们将提供这样一个Web服务,通过给它传入姓名,服务返回:
你好[姓名],欢迎来到Web服务的世界。
这就是我们的需求。
我们将马上根据AXIS的要求完成我们的需求,你就会发现原来Web服务可以这么简单!
编写JAVA类Hello.java,内容如下:
publicclassHello{
publicStringhello(Stringname){
if(name==null)
name="";
return"你好"+name+",欢迎来到Web服务的世界!
";
}
}
仅此而已,无需编译,将该文件改名为Hello.jws并拷贝到AXIS应用目录C:
\Tomcat\webapps\axis下。
下面我们就可以测试该Web服务了,打开浏览器并输入刚刚创建的文件名对应的URL地址http:
//localhost:
8080/axis/Hello.jws浏览器显示如下结果:
ThereisaWebServicehere
ClicktoseetheWSDL
点击页面上的链接查看该Web服务对应的WSDL信息如下所示(我们将在下一小节简单介绍WSDL)
xmlversion="1.0"encoding="UTF-8"?
>
- definitions targetNamespace="http: //localhost: 8080/axis/Hello.jws" xmlns="http: //schemas.xmlsoap.org/wsdl/" xmlns="http: //www.w3.org/2000/xmlns/" xmlns: apachesoap="http: //xml.apache.org/xml-soap" xmlns: soapenc="http: //schemas.xmlsoap.org/soap/encoding/" xmlns: impl="http: //localhost: 8080/axis/Hello.jws" xmlns: intf="http: //localhost: 8080/axis/Hello.jws" xmlns: wsdlsoap="http: //schemas.xmlsoap.org/wsdl/soap/" xmlns: xsd="http: //www.w3.org/2001/XMLSchema" xmlns: wsdl="http: //schemas.xmlsoap.org/wsdl/"> - messagename="helloRequest"> partname="name"type="xsd: string"/> message> + messagename="helloResponse"> - portTypename="Hello"> - operationname="hello"parameterOrder="name"> inputname="helloRequest"message="intf: helloRequest"/> outputname="helloResponse"message="intf: helloResponse"/> operation> portType> - bindingname="HelloSoapBinding"type="intf: Hello"> bindingstyle="rpc"transport="http: //schemas.xmlsoap.org/soap/http"/> - operationname="hello"> operationsoapAction=""/> - inputname="helloRequest"> bodyuse="encoded"encodingStyle="http: //schemas.xmlsoap.org/soap/encoding/" namespace="http: //DefaultNamespace"/> input>- outputname="helloResponse"> bodyuse="encoded"encodingStyle="http: //schemas.xmlsoap.org/soap/encoding/" namespace="http: //localhost: 8080/axis/Hello.jws"/> output> operation> binding> - servicename="HelloService"> - portname="Hello"binding="intf: HelloSoapBinding"> addresslocation="http: //localhost: 8080/axis/Hello.jws"/> port> service> definitions> 到此我们已经完成了hello的Web服务了,那我们怎么告诉用户如何来使用该服务呢? 我们只需要告诉用户我们的Web服务的URL地址: http: //localhost: 8080/axis/Hello.jws? wsdl就可以了! 下一节我们将介绍如何通过这个地址来访问对应的Web服务。 四.WebService客户端开发 在这一节中我们将使用三种不同的语言来访问刚刚创建的Web服务,分别是JAVA、VB、VC。 为了使用VB和VC访问Web服务,我们需要安装微软公司的SoapToolkit开发工具包,这个工具包可以从微软公司的主页 下载,下载该软件包并使用默认方式安装即可。 在开始客户端开发之前有两个概念我们必须先粗略的介绍一下。 SOAP: 简单对象访问协议。 这是一种在松散的、分布的环境中使用XML对等地交换结构化的和类型化的信息提供了一个简单且轻量级的机制,它是一个基于XML的协议。 它包括四个部分: SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encodingrules),用于表示应用程序需要使用的数据类型的实例;SOAPRPC表示(RPCrepresentation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。 虽然这四个部分都作为SOAP的一部分,作为一个整体定义的,但他们在功能上是相交的、彼此独立的。 特别的,信封和编码规则是被定义在不同的XML命名空间(namespace)中,这样使得定义更加简单。 SOAP的主要设计目标是简明性和可扩展性。 这就意味着有一些传统消息系统或分布式对象系统中的特性将不包含在SOAP的核心规范中。 这些特性包括: 分布式垃圾收集;批量消息传输/处理;对象引用;对象激活。 WSDL: WebService描述语言。 使用了WSDL,我们就可以通过这种跨平台和跨语言的方法使WebService代理的产生自动化。 就像COM和CORBA的IDL文件,WSDL文件由客户和服务器约定。 由于WSDL设计成可以绑定除SOAP以外的其他协议,这里我们主要关注WSDL在HTTP上和SOAP的关系。 同样,由于SOAP目前主要用来调用远程的过程和函数,WSDL支持SOAP传输的文档规范。 WSDL文档可以分为两部分。 顶部分由抽象定义组成,而底部分则由具体描述组成。 抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。 这就定义了一系列服务,截然不同的网站都可以实现。 1.JAVA客户端 使用AXIS的工具将使Web服务的访问和我们之前介绍的创建一个Web服务一样的简单。 我们前面安装的AXIS环境中已经包含着这样的工具,它是一个JAVA类,类名为: org.apache.axis.wsdl.WSDL2Java。 打开命令行窗口,转到AXIS目录下的WEB-INF子目录。 确保Tomcat服务已经处于启动状态,键入命令: Java-Djava.ext.dirs=liborg.apache.axis.wsdl.WSDL2Javahttp: //localhost: 8080/axis/Hello.jws? wsdl 该命令执行的结果是在当前所在目录下产生一个子目录localhost/axis/Hello_jws,该目录下有四个JAVA源文件,它们分别是: Hello.java定义了Web服务接口,此例中只有一个hello方法。 HelloService.java定义了用于获取Web服务接口的方法。 HelloServiceLocator.java接口HelloService的具体实现。 HelloSoapBindingStub.javaWeb服务客户端桩,通过该类与服务器交互。 这四个JAVA类帮我们处理了大部分的逻辑,我们需要的仅仅是把这些类加到我们的项目然后创建一个我们自己的类来调用它们即可。 为此我们新加一个类Main.java,为了方便,让这个类与刚产生的四个类都在同一个包下。 内容如下: //Main.java packagelocalhost.axis.Hello_jws; publicclassMain{ publicstaticvoidmain(String[]args)throwsException{ HelloServiceservice=newHelloServiceLocator(); Hellohello=service.getHello(); System.out.println("Response: "+hello.hello("罐头")); } } 使用以下命令进行编译: javac-classpathlib\axis.jar;lib\jaxrpc.jarlocalhost\axis\Hello_jws\*.java 如果编译没有问题的话执行该测试程序: java-Djava.ext.dirs=lib-cp.localhost.axis.Hello_jws.Main//运行结果: Response: 你好罐头,欢迎来到Web服务的世界! 在WSDL2Java工具自动产生的几个类中,类HelloServiceLocator中保存这一些跟服务器相关的信息,例如URL地址等,当服务器的地址更改后但是服务并没有改动的时候直接修改该文件中的字符串定义,而无需重新生成这几个类。 具体需要修改的内容,打开该文件便可一目了然。 2.VB客户端 有了微软SOAPtoolkit,用VB调用Web服务也是一件令人愉快的事情。 打开VB开发环境新建一个标准EXE项目,打开工程(Project)菜单并选择引用打开组件引用对话框如下图所示: 找到并选中MicrosoftSoapTypeLibrary。 图4 新建并编辑窗体如下图所示: 图5 编辑按钮Call的点击事件处理程序如下: (注意窗体的控件名称要与程序中的名称对应) PrivateSubcallBtn_Click() '这种做法需要在工程中引用SoapTypeLibrary 'DimsoapAsMSSOAPLib.SoapClient 'Setsoap=NewMSSOAPLib.SoapClient Dimsoap Setsoap=CreateObject("MSSOAP.SoapClient") OnErrorResumeNext 'soap.mssoapiniturlText.Text Callsoap.mssoapinit(urlText.Text) IfErr<>0Then MsgBox"初始化SOAP失败: "+Err.Description urlText.SetFocus Else IfLen(Trim(nameText.Text))=0Then MsgBox"请输入您的姓名! " nameText.SetFocus Else responseText.Text=soap.hello(nameText.Text) EndIf EndIf EndSub 保存项目并运行,输入姓名并点击按钮Call。 3.VC客户端 打开VC开发环境,新建项目HelloClient,项目类型为Win32ConsoleApplication的空项目。 新建C++SourceFile文件名为: HelloSoap.cpp,编辑文件内容如下: //#include"stdafx.h" #include #import"msxml3.dll" usingnamespaceMSXML2; //根据自己机器的情况修改下面语句中指定的路径 #import"C: \ProgramFiles\CommonFiles\MSSoap\Binaries\mssoap1.dll"\ exclude("IStream","ISequentialStream","_LARGE_INTEGER",\ "_ULARGE_INTEGER","tagSTATSTG","_FILETIME") usingnamespaceMSSOAPLib; voidHello(){ ISoapSerializerPtrSerializer; ISoapReaderPtrReader; ISoapConnectorPtrConnector; //Connecttotheservice Connector.CreateInstance(__uuidof(HttpConnector)); Connector->Property["EndPointURL"]="http: //localhost: 8080/axis/Hello.jws? wsdl"; Connector->Connect(); //Beginmessage Connector->BeginMessage(); //CreatetheSoapSerializer Serializer.CreateInstance(__uuidof(SoapSerializer)); //Connecttheserializertotheinputstreamoftheconnector Serializer->Init(_variant_t((IUnknown*)Connector->InputStream)); //BuildtheSOAPMessage Serializer->startEnvelope("","",""); Serializer->startBody(""); Serializer->startElement("hello","","",""); Serializer->startElement("name","","",""); Serializer->writeString("罐头"); Serializer->endElement(); Serializer->endElement(); Serializer->endBody(); Serializer->endEnvelope(); //Sendthemessagetothewebservice Connector->EndMessage(); //Letusreadtheresponse Reader.CreateInstance(__uuidof(SoapReader)); //Connectthereadertotheoutputstreamoftheconnector Reader->Load(_variant_t((IUnknown*)Connector->OutputStream),""); //Displaytheresult printf("Response: %s\n",(constchar*)Reader->RPCResult->text); } intmain() { CoInitialize(NULL); Hello(); CoUninitialize(); return0; } 编译并运行该项目。 本节只是为了演示如果通过VC来访问使用AXIS创建的Web服务,至于Soaptoolkit的具体使用请参照soaptoolkit的帮助手册,其他语言的访问请查阅相关的文档。 五.AXIS集成 为了让我们的WEB应用程序支持Web服务功能,我们需要将AXIS集成到我们的应用程序中。 集成AXIS很简单,首先需要拷贝AXIS用到的几个JAR包文件,这些文件都在[AXIS]\WEB-INF\lib目录下,将这些文件拷贝到我们自己的应用目录下的WEB-INF\lib。 另外如果你用的不是TOMCAT服务器那就需要拷贝activation.jar,这个JAR文件可以在[TOMCAT]\common\lib目录下找到! 拷贝完JAR文件后就是web.xml的配置了,只需要把AXIS中的web.xml中的配置信息添加到我们自己应用程序中的web.xml中即可。 最重要的是下面的内容: org.apache.axis.transport.ht
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 AXIS 作为 开发 环境 体会 Web 服务 过程