积木首页 | 500多种网页特效 | 函数手册 | 广播电台 | 高清晰图片素材 | 服务器合租 | 万年历 | 网友最新浏览记录
程序开发 网页设计 搜索引擎 特效代码 操作系统 防范病毒 黑客技术 图形图象 电脑硬件 网络技术 服 务 器 数 据 库 网文精粹
您的位置:积木首页 >> 程序开发频道 >> J2EE >> 正文:
标题:30分钟内创建Web Service
时间:2002-9-23 来源:不详 浏览数:
    你已经听到过有关Web Service的某些宣传,可能这些宣传将你弄得头昏脑胀。在你的心中或许一直有一个疑团:到底什么是Web Service,我怎样才能使用它们?我们写的这个系列文章将揭开Web Services的神秘面纱,一步步地向你展示怎样去创建、发布、使用及发现它们。
    创建一个基础的Web Services并非难事。为了证实这一点,我们将在这篇文章中向你展示如何在30分钟内构建一个Web Service。在后续的文章中,我们将就Web Services做深入的研究,就以下主题做充分诠释:
        
  • SOAP 消息

  •     
  • WSDL 定义项及它们与代码的关系

  •     
  • 发布服务至UDDI目录

  •     
  • 将先前遗留的应用程序做为Web Services发布出去

  •     
  • 部分高级话题(如安全问题)



    在这篇介绍性的文章中,我们先就Web Services做一些简单的介绍,紧接着向各位演示一个调用及执行Web Service的java类。我们所有的例子程序都是用java写的。我们使用Systinet提供的免费的工具及运行环境(有关访问及下载此软件的详细信息请参看软件安装这一节)来创建例子程序。并非完全必要使用这一工具来理解这些示例程序,但我们强烈建议你使用它。这里介绍的概念及创建的代码是通用的,它们与工具相对独立。我们假设你具备XML的知识,但对Web Services还无所知。
    我们认为J2EE是实施商业逻辑的最成熟的框架,我们的目标就是使Web Services 作为J2EE的一个扩展模块,以提供基于XML协议的一致的描述及发现机制。这样就可使得现有的基于J2EE的系统能被更广泛的应用所调用,并提供在异种环境下创建核心商业应用的更强的适应能力。

Web Service - 基本概念


[pre]    Web Service是具备下列特性的组件:
    1.它通过一个SOAP(Simple Object Access Protocol)接口被访问
    2.它的接口定义在一个WSDL (Web Service Description Language)文档里。[/pre]
    SOAP是Web Services的根本。它是一种具有扩展性的XML消息协议。SOAP提供了一个应用程序向另一个应用程序发送XML消息的简单而一致的机制。一个SOAP消息是从SOAP发送者传至SOAP接收者的单路消息,任何应用程序均可作为发送者或接收者。SOAP能够支持许多通讯行为,包括请求/响应(request/resposne)、solicit response、单路异步消息,甚至简单讯息(notification)。SOAP是一个仅定义消息结构及一些消息处理规则的高层协议。它完全与底层的协议独立,因此SOAP消息能通过HTTP、JMS或邮件通讯协议来传输。但在当前,通常使用HTTP协议来传送SOAP消息。在这篇文章的后面我们将展示一些SOAP消息的例子。
    WSDL是一份包含Web Service描述信息的XML文档,它包含了访问和使用一个Web Service所需要的所有信息,包括这个Web Service的功能、怎样与其通信及它的位置。在开发阶段,你使用WSDL文档创建你的服务接口。一些SOAP的实现(包括Systinet WASP)会在运行时使用WSDL支持动态通信。

安装此软件


    [i]环境要求:a Java 1.3.x SDK,a standard HTTP browser。JAVA_HOME环境变量指向你Java 1.3.x SDK的安装目录。[/i]
    如果你想跟着练习这些示例,需要你从Systinet下载WASP Advanced。解压缩下载的文件包到一个本地磁盘(解压至C盘会更好些)。从bin子目录下找到名为install的脚本文件,执行之以完成安装。在我们的例子中,我们假设将下载的文件解压缩至c:\wasp-advanced 目录下。还需要你下载示例代码 并解压缩至c:\wasp_demo目录下。如果你选择了不同的目录,请相应更新env.bat脚本文件(更改WASP_HOME及WASP_DEMO的值以使其指向WASP的安装目录及示例代码所在目录)。

实现一个简单的Web Service


[pre]    我们将按如下步骤来创建一个简单的Web Service:
    1.创建实现Web Service的商业逻辑的类。 首先我们需要创建一个实现这个Web Service商业逻辑的java类。在这个例子中,我们将创建一个模拟股票报价的java类。
    2.将这个java类发布至SOAP服务器上。我们将演示怎样使用WASP的发布工具发布一个java类至一个SOAP服务器
    3.生成访问此服务的客户端代理类。一个客户端应用程序使用一个代理对象来访问Web Service。在请求阶段,这个代理对象接收到一个从客户端应用程序发出来的方法调用,并将此调用转化成一个XML消息。在响应阶段,这个代理对象接收到一个回复消息,随后将其转化成java的对象,并将结果返回给客户端应用程序。
    4.客户端应用程序的开发。客户端应用程序将代理对象看作是一个便利于与Web Service交互的普通的java对象。[/pre]
    提示:我们使用微软Windows平台的一些语法来创建我们的脚本文件,如果你使用的是一个基于Unix的环境,请相应更新这些脚本。现在让我们开始编写这个具备股价查找功能的简单java类。请看如下的java代码:
    提示:这个示例中的所有代码均可在解压缩之后的示例代码子目录下找到。它们位于com.systinet.demos.stock包中。
[pre]/*
 * StockQuoteService.java
 *
 * Created on Sat 13th Oct 2001, 15:25
 */

package com.systinet.demos.stock;

/**
 * Simple stock quote service
 * @author  zdenek
 * @version 1.0
 */
public class StockQuoteService {

    
    public double getQuote(String symbol) {
        if(symbol!=null && symbol.equalsIgnoreCase("SUNW"))
            return 10;
        if(symbol!=null && symbol.equalsIgnoreCase("MSFT"))
            return 50;
        if(symbol!=null && symbol.equalsIgnoreCase("BEAS"))
            return 11;
        return 0;    
    }
    
    public java.util.LinkedList getAvailableStocks() {
        java.util.LinkedList list = new java.util.LinkedList();
        list.add("SUNW");
        list.add("MSFT");
        list.add("BEAS");
        return list;
    }

}

Figure 1: Web Service code (StockQuoteService.java)[/pre]我们的例子不过是又一个简单的股标报价系统而已(我们已经看到许多这样的系统,开发者必须是已登记的而被授权的卖主),但它说明了创建及部署Web Service是多么容易。在我们的例子中,我们将去获取三种股票的市价(BEAS,MSFT,及SUNW)。
    将我们开发的类转化成一个Web Service的最便捷的方式是:编译我们开发的java类,然后用部署工具将这些类发布至Web Service的运行环境。
    提示:你可以在示例源代码bin子目录下找到所有的脚本文件。提示:在你运行此示例之前,你需先安装Systinet的SOAP框架。请参考安装这一节。
    首先,运行startservcer.bat脚本以起动Web Service运行环境。然后我们编译StockQuoteService.java文件,并使用deploy.bat将编译后的类发布至SOAP运行时环境。
    接下来,我们需要通过在HTTP浏览器开启管理控制台 来确认是否一切都工作正常了。请按刷新按钮以显示发布至服务器上的服务包列表。你应当看到包含StockQuoteService服务的StockService包已发布至服务器上。Web Service运行环境会自动产生WSDL文件,外部可通过http://localhost:6060/StockQuoteService/链接获取此文件。
[pre]<?xml version='1.0'?>
<wsdl:definitions name='com.systinet.demos.stock.StockQuoteService' 
targetNamespace='http://idoox.com/wasp/tools/java2wsdl/output/com/systinet/demos/stock/'
    xmlns:mime='http://schemas.xmlsoap.org/wsdl/mime/'
    xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
    xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
    xmlns:xsd='http://www.w3.org/2001/XMLSchema'
    xmlns:ns0='http://idoox.com/containers'
    xmlns:http='http://schemas.xmlsoap.org/wsdl/http/'
    xmlns:tns='http://idoox.com/wasp/tools/java2wsdl/output/com/systinet/demos/stock/'
    xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/'>
    <wsdl:message name='StockQuoteService_getQuote_Request'>
        <wsdl:part name='p0' type='xsd:string'/>
    </wsdl:message>
    <wsdl:message name='StockQuoteService_getQuote_Response'>
        <wsdl:part name='response' type='xsd:double'/>
    </wsdl:message>
    <wsdl:message name='StockQuoteService_getAvailableStocks_Request'/>
    <wsdl:message name='StockQuoteService_getAvailableStocks_Response'>
        <wsdl:part name='response' type='ns0:LinkedList'/>
    </wsdl:message>
    <wsdl:portType name='StockQuoteService'>
        <wsdl:operation name='getAvailableStocks'>
            <wsdl:input name='getAvailableStocks' message='tns:StockQuoteService_getAvailableStocks_Request'/>
            <wsdl:output name='getAvailableStocks' message='tns:StockQuoteService_getAvailableStocks_Response'/>
        </wsdl:operation>
        <wsdl:operation name='getQuote' parameterOrder='p0'>
            <wsdl:input name='getQuote' message='tns:StockQuoteService_getQuote_Request'/>
            <wsdl:output name='getQuote' message='tns:StockQuoteService_getQuote_Response'/>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name='StockQuoteService' type='tns:StockQuoteService'>
        <soap:binding transport='http://schemas.xmlsoap.org/soap/http' style='rpc'/>
        <wsdl:operation name='getAvailableStocks'>
            <soap:operation soapAction='' style='rpc'/>
            <wsdl:input name='getAvailableStocks'>
                <soap:body use='encoded' encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' 
            namespace='http://idoox.com/wasp/tools/java2wsdl/output/com/systinet/demos/stock/'/>
    &nb

[1] [2] [3] 下一页


(责任编辑:笑虎)
关于本站 | 广告服务 | 联系我们 | 版权申明 | 强强联盟 | 投稿热线 | 网站地图 | 申请链接
Copyright ©2005-2006 Gimoo.net All rights reserved. 积木网 版权所有
E-mail:gimoohr@gmail.com 京ICP备05050695号