开发WEB SERVICES

 

第五章 开发WEB SERVICES

随着计算机网络的发展, WEB应用获得了巨大成功和发展,它已经渗透到了商业领域和个人生活的方方面面,现在人们只有使用浏览器就可以享受各种各样的WEB服务。WEB服务(WEB SERVICES)的好处是显而易见的。它使企业应用集成(EAI),特别使异构系统的集成成为可能,并且越加方便,它使应用程序与应用程序可以了相互对话,它使系统从原来面向对象的体系结构过度到面向服务的体系结构(SOA),使应用的开发及集成成本迅速下降。
Web Services 是通过一系列标准和协议来保证程序之间的动态连接。这些协议包括:SOAP, WSDL, UDDI。Web Services的工作原理图如下图28。

这里需要了解一些概念:
1、什么是SOAP?SOAP就是简单对象访问协议(Simple Object Access Protocol),它规定了Web Services之间是如何传递消息的。其中传递的消息又是使用XML来定义的。
2、什么是WSDL?WSDL就是WEB服务描述语言(Web Services Description Language),它定义了WEB服务的接口,如服务名、服务所在机器、监听端口、方法的参数顺序等信息。
3、什么是WSDD?WSDD就是WEB服务分布描述(Web Service Deployment Descriptor), 它定义了WEB服务的接口,如服务名、提供的方法、方法的参数等信息。
4、什么是UDDI?UDDI就是统一描述、发现和集成(Universal Description, Discovery, and Integration)。UDDI用于集中存放和查找WSDL描述文件,起着目录服务器的作用。
Web Services并不是万能的,它也要一定的局限性,一般来说对于基于WAN和Internet的应用、基于异构平台的应用、需要强安全特性的应用、EAI(企业应用集成)和行业内部B2B应用比较适合。

第一节 准备开发Web Services

你首先需要下载Apache AXIS,最新的是AXIS1.2测试版,下载地址如下:
http://archive.apache.org/dist/ws/axis/1_2alpha/
下载完后,展开压缩包中的AXIS目录到TOMCAT的WebApps目录下。这里要求TOMCAT是4.X及之后版本,要求JDK1.4及以后版本。关于JDK的安装可以参考第一章的相关内容。TOMCAT的安装可以参考相关文章或TOMCAT的相关手册。在本文中不介绍独立安装的TOMCAT如何配置AXIS来开发Web Services,因为我们是专门针对NETBEANS开发来讲的,但其实方法类似。

 

 

 

第二节 在NETBEANS中安装AXIS并启动服务

首先保证你的NETBEANS已经安装成功(安装方法参加第一章中的相关内容)。然后你打开WINDOWS的资源管理器,找到NETBEANS的安装目录,这时你会看到一个叫jakarta-tomcat-5.0.19的目录,进入这个目录下的webapps目录,有压缩软件打开刚刚下载的AXIS安装包,找到其中的AXIS目录,将该目录释放到刚刚找到的webapps目录中。如果你打算TOMCAT上发布的所有站点都支持Web Services的话,接下来你还要到刚刚释放的AXIS目录下的WEB-INF/lib目录下的所有的JAR文件拷贝到jakarta-tomcat-5.0.19目录下的common/lib目录下。如果你使用的JAVA 2是J2SE则还有拷贝另外两个文件分别到common/lib(同上理,这不是必须的,除非你打算TOMCAT中的站点都要支持Web Services)和axis/WEB-INF/lib目录下,这两个文件的下载路径分别是:javamail(http://java.sun.com/products/javamail/index.jsp)和JAF(http://java.sun.com/products/javabeans/glasgow/jaf.html),如果你安装的是J2EE,这两个文件就不需要安装了。然后你在NETBEANS中选择“运行环境” 标签,出现如图29的界面。如果你看不到“运行环境”标签,可以在系统菜单上选择“窗口”下的“运行环境”子菜单(如图31所示),就可以看到这个标签,只是有可能这个标签不是出现在这个地方,你可以用鼠标拖动它到指定位置(在NETBEANS中许多的标签都可以使用鼠标拖动到指定位
置显示)。在图29中,你选择“服务器注册”下面的“TOMCAT 5服务器”下的“http://localhost:8084”(一般情况下只有这一个,而且默认是8084端口,除非你改变了端口号,或你和我一样安装了两个TOMCAT服务,并在这里注册了它,你才会在这里看到有两个服务器,如我上面显示的“http://localhost:8090”),鼠标右键,弹出如图30的右键菜单,选择“启动/停止服务器…”菜单,在弹出的图32界面中选择“启动服务器”(如果服务已经启动,在这里将看到图33所示的界面,选择“停止服务器”后,再通过此方法来启动服务器),这时等待一会儿,如果没有出现错误,则TOMCAT服务器启动成功。

第三节 测试AXIS是否安装成功

现在,我们的TOMCAT服务器已经启动,但AXIS是否安装成了呢?我们可以通过测试知道AXIS是否安装成功。
打开IE,在地址栏中输入 http://localhost:8084/axis,出现图34界面。然后点击页面上的Validate连接,如果出现页面上有图35所示内容就表示AXIS安装成功了。如果没有出现这个界面,此页面上会提示你缺少什么JAR文件的,而且会给出下载路径,直接下载它们,然后复制到axis/WEB-INF/lib目录和jakarta-tomcat-5.0.19/common/lib(记得拷贝到这个目录下不是必须的)目录下。然后再重复前面的验证过程,直到页面上出现图35所示的内容。

 

 

 

第四节 开发Web Services

在AXIS安装成功之后,你就可以开始开发自己的Web Services了。在NetBeans中开发Web Services其实十分简单,它就是一个建立JAVABEAN的过程。换句话说,原则上每一个你编写的JAVABEAN都可以作为一个Web Services。关于在NetBeans中编写JAVABEAN中的方法请参考第三章第三节的内容。

第五节 发布Web Services

要发布Web Services首先要编写WSDD文件。有些开发工具可以帮助我们,在这里我介绍如何手工发布
Web Services。手工发布有三种方法。
第二种:按照AXIS帮助文档中介绍的手工定制方法发布,它要求为每个需要发布成Web Services的JAVABEAN编写一个deploy.wsdd文件,并将这个文件放置在JAVABEAN的同级目录下。deploy.wsdd文件的简单格式如下:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="服务名" provider="java:RPC">
        <parameter name="className" value="对应的完整类名(包括包信息)"/>
        <parameter name="allowedMethods" value="*"/>
    </service>
</deployment>
你可以参考这个编写你自己的deploy.wsdd文件。然后,你需要使用下面的方法向AXIS服务器进行分发,首先在DOS命令下进入需要发布的JAVABEAN所在目录,然后使用如下命令进行发布:
java org.apache.axis.client.AdminClient deploy.wsdd
当你看到DOS命令窗口中出现Done processing字样时,表示已经发布成功。不过这个官方方法我没有发布成过,具体原因我也不明白,如果哪位知道还请告诉我。
第三种:使用server-config.wsdd文件进行发布(我喜欢这种方法,方便快捷)。首先这个文件必须放置在你需要发布站点的WEB-INF目录下。这个文件从哪里获得呢?如果你已经成安装了AXIS系统并测试通过,这时你可以在你的TOMCAT目录下的work/Catalina/localhost/axis/loader/org/apache/axis/server目录下找到它,然后你拷贝它到你需要发布的站点的WEB-INF目录下。最后你可以使用记事本程序打开这个文件,在这个文件中查找“<service name=”字符串,然后你可以看到有两个这样的XML节点,现在你可以按照它们的样式编写自己的配置了。下面我对它的格式做个简单介绍:
<service name="服务名" provider="java:RPC">
 <parameter name="allowedMethods" value="*"/>
 <operation name="方法名" returnType="方法返回数据类型"/>
 <operation name="方法名" returnType="方法返回数据类型">
        <parameter name="参数名" type="参数的数据类型" mode="参数的模式"/>
 </operation>
 <parameter name="className" value="对应的JAVABEAN的类名(包含包信息)"/>
 </service>
大家看上面列出来的格式应该可以明白一二了,这里我重点讲解几个要点。
1、在“<parameter name="allowedMethods" value="*"/>”这一段用于表明这个JAVABEAN中的所有方法(这些方法一定是JAVABEAN的PUBLIC类型的)都公开成为服务的方法,使其它应用程序可以调用这些方法。如果用户不希望公开所有JAVABEAN中的方法,可以在这里指定需要公开的方法,方法是修改value的值,将需要公开的函数名列举在这里,每个方法之间使用“,”分隔。举个例子来说明,比如我需要公开这个JAVABEAN中的say、getEmplNo、setEmplNo和run方法,则它的写法为“<parameter name="allowedMethods" value="say,getEmplNo,setEmplNo,run"/>”。
2、“operation”节点用于对方法进行描述,如果方法没有参数则只要写成“<operation name="方法名" returnType="方法返回数据类型"/>”;如果方法有一个参数则写成如下形式:
<operation name="方法名" returnType="方法返回数据类型">
        <parameter name="参数名" type="参数的数据类型" mode="参数的模式"/>
</operation>
如果方法有多个参数则要注意参数描述的顺序必须和方法中定义的参数的顺序和数据类型相同。
3、数据类型的描述方法。谈到数据类型的描述你就需要注意你的server-config.wsdd文件开头的定义:
<deployment name="defaultClientConfig"
            xmlns="http://xml.apache.org/axis/wsdd/"
            xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
            xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler">
大家注意到没有,在这儿有这么一段文字xmlns:java=" http://xml.apache.org/axis/wsdd/providers/java",这段文字就是告诉你在使用数据类型描述时要使用JAVA的数据类型。你可以这样写返回类型为String的定义<operation name="方法名" returnType="java:String"/>,你也可以写成<operation name="方法名" returnType="xsd:string"/>但最好要在deployment元素中定义xmlns:xsd="http://www.w3.org/2001/XMLSchema"。
当然,在WSDD中还有其它的元素可以定义,具体可以参考http://www.osmoticweb.com/axis-wsdd/网站。
在你定义好WSDD文件后,你就可以启动TOMCAT,然后,我们来做个检验,在IE中键入
http://localhost:8090/你的站点名/services/服务名?wsdl,如果返回同图36相似的界面就表示你的Web Services发布成功了。

第六节 使用Java调用Web Services

我在这里使用一个简单JSP页面来调用Web Services。我先给出代码:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="org.apache.axis.client.Call,org.apache.axis.client.Service"%>
<%@page import="org.apache.axis.encoding.XMLType,org.apache.axis.utils.Options"%>
<%@page import="javax.xml.rpc.ParameterMode,javax.xml.namespace.QName"%>
<html>
<head><title>JSP Page</title></head>
<body>
<%
String endpoint = "http://localhost:8090/WEBServicesTest/services/HelloWorld";//这里为你的WEB SERVICES的访问路径;
String method = "hello";
Object[] param=null;
String myFund="";

try{
    Service service = new Service();
    Call call = (Call) service.createCall();
  call.setOperationName(method);

    myFund = (String) call.invoke(param);
}
catch(Exception e){
    myFund=e.getMessage();
}
%>
<%=myFund%>
</body>
</html>
这个代码不是很复杂,相信大家都能够自己看懂,所以我在此不在讲解。在JSP中调用Webservice的关键是要引入六个包文件——org.apache.axis.client.Call、org.apache.axis.client.Service、org.apache.axis.encoding.XMLType、org.apache.axis.utils.Options、javax.xml.rpc.ParameterMode、javax.xml.namespace.Qname。其它代码可以参考相关文档。在下载的AXIS安装包中的doc目录下的apidoc目录下都有相关帮助文档。

第七节 使用异构系统调用Web Services

Web Services在很多情况下是被异构系统调用的,这些系统有些使用VB开发,有些使用DELPHI开发,有些使用VC开发,而有些使用PB开发,总之它可能是任何语言开发的。这些异构系统的应用万变不离其中,都有相通性。下面我以VB为例讲解在异构系统中如何调用JAVA编写的Web Services。
在VB中调用Web Services的实现方法很多,我只介绍其中一种。首先,去下载PocketSOAP的SDK,下载地址是http://www.pocketsoap.com/pocketsoap/。为什么我们使用PocketSOAP而不使用微软的SOAP TOOL KIT 3.0呢?哈哈,我告诉你,微软的SOAP的SDK调用JAVA编写的Web Services会报告错误,不知到这是BUG呢还是不兼容,总之用不了。当你下载完成PocketSOAP后运行安装它。然后启动VB。
在一个按钮事件中写入以下代码
''''创建pocketSOAP.Envelope对象
Dim env
    Set env = CreateObject("pocketSOAP.Envelope.11")
   
    '''' 设置方法名和方法名的命名空间
    env.SetMethod "hello", "http://localhost:8090/WEBServicesTest/services/HelloWorld"
   
    '''' 创建函数使用的参数
    env.Parameters.Create "name", "Web Services"
   
    '''' 创建pocketSOAP.HTTPTransport对象用于发送SOAP请求
    Dim http
    Set http = CreateObject("pocketSOAP.HTTPTransport")
   
    '''' 设置SOAPAction
    http.SoapAction = "http://localhost:8090/WEBServicesTest/services/HelloWorld#hello"
    '''' 发送HTTP 请求
    http.send "http://localhost:8090/WEBServicesTest/services/HelloWorld", env
   
    '''' 解析SOAP的返回信息
    env.parse http
   
    MsgBox "结果为: " & env.Parameters.Item(0).Value
然后运行此程序,哈哈,结果返回了。现在看看是不是使用SOAP的SDK开发很简单,呵呵,本来就简单。好了,你现在可以写个自己的Web Services来做测试了。

关于使用NetBeans开发B/S结构的商业应用我就讲解到这里,由于本人的知识有限,在文章中可能会有一些错误,还请各位多多指正。本人的联系方式email:zhaowenbinmail@163.com。这篇文章适合于刚刚入门使用NETBEANS开发的JAVA程序员。最后希望本文章对大家有帮助。

 

 

    call.setTargetEndpointAddress(new java.net.URL(endpoint));

 

 

This is an Open Source [MPL] SOAP client COM component for the Windows family, originally targeted at PocketPC (hence the name), there is also a Win32 version that works on Windows 95/98/Me/NT4/2000/XP/2003. The package includes a HTTP 1.1 transport for making HTTP based SOAP requests, however the transport is separate from the main SOAP core, so any other transports can be easily added. James Clark's excellent Expat XML Parser is used for parsing the response SOAP messages. PocketSOAP includes the following features Support for SOAP 1.1 and SOAP 1.2 SOAP 1.1 Section 5 encoding support, including simple types, base64 binary, arrays, multi-dim arrays, partial & sparse arrays, nil's, complex types, root handling and multi-references (including circular references) Support for document/literal style SOAP services (such as ASP.NET) Attachments support via both DIME and SOAP with Attachments Support for SOAP headers Full support for pluggable serializers, replace any of the standard serializers with your own (e.g. you could provide a serializer that maps collection objects to/from SOAP Arrays). The serializer engine include multi-ref support for both serialization & deserialization. Comes with a propertyBag serializer, serialize any persistant VB object to/from a SOAP complex type out of the box with no extra code !. Support for both 1999 & 2001 Schema versions. Efficient stream based parsing. HTTP 1.1 support including persistent connections, SSL, proxies, authentication, proxy authentication, redirects, cookies and compression.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值