My FAQ,最新最全的IT技术FAQ
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 未整理篇 | 技术讨论
  当前位置: > IBM专区 > WebSphere > WebSphere综合
IBM WebSphere 开发者技术期刊
作者:佚名 时间:2005-09-11 18:58 出处:互连网 责编:小渔
              摘要:IBM WebSphere 开发者技术期刊: 使用 Rational Developer 创建一个简单的 Web 服务并将其用于 Web 应用程序
指南

级别: 初级

Colette Burrus, 自由撰稿人, IBM(已退休)
Stephanie Parkin, 信息架构师,developerWorks, IBM

2005 年 8 月 1 日

本书摘使用 Rational Developer 创建一个简单的 Web 服务和一个使用此 Web 服务的 Web 应用程序。它还解释了基本的 Web 服务术语和概念,并说明如何用 WebSphere Application Server 运行此 Web 服务和应用程序。

本文节选自 Colette Burrus 和 Stephanie Parkin 合著的新书 Developing Web Services for Web Applications : A Guided Tour for Rational Developer and WebSphere ,此书将在 2005 年 7 月由 IBM 出版社出版。

Web 服务术语简介
Web 服务 是可以通过网络进行访问的程序,它使用标准化消息传递协议与希望使用其功能的其他程序进行通信。Web 服务驻留在应用服务器上,如 WebSphere® Application Server,应用服务器可以位于 Internet、企业的专用内部网或者自己的计算机中。Web 服务提供的功能可以是通用的,如查询特定城市的天气预报,也可以是应用程序特定的,如为某个电子商务应用程序创建订单。Web 服务还是自描述的;也就是说,它们包括对自己所提供功能以及如何使用这些功能的特殊描述。应用程序编程人员利用这些描述来找到(发现)和使用这些服务。

Web 应用程序 也驻留在应用服务器上。这些应用程序由一个或多个 web 页组成,用户通过 Web 浏览器访问这些 web 页。它们通常包括静态内容与动态内容的组合,如文本、图像和运行在服务器或用户的 Web 浏览器中的程序。Web 应用程序可以使用驻留在同一服务器上的 Web 服务,也可以使用该 Web 应用程序可以访问的网络中任何服务器上的 Web 服务。如果您不告诉使用 Web 浏览器的用户,他们不会知道内容分布在多个服务器中。

请注意,我们没有讨论用什么编程语言编写 Web 服务,也没有讨论 Web 服务运行在什么操作系统中。因为这些问题都无关紧要。Web 服务只需要在应用程序所使用的网络中可用即可,服务和应用程序需要使用正确的协议相互通信。编写应用程序的语言可以不同于编写服务的语言,应用程序也可以运行在不同的操作系统中。

在本文中,您将创建一个简单的 Web 服务和 Web 应用程序,它们恰好以相同的编程语言 (Java™) 编写,并且恰好运行在相同机器(您的机器)上。但在后续各章中,您将使用 Internet 上公开可用的 Web 服务,您不知道 Web 服务是用什么语言编写的,或者它们正运行于什么操作系统上。Web 服务和应用程序使用特定、标准化格式的消息相互通信。

一个应用程序构建一个消息请求,如“请为我提供关于大西洋 NC 的天气预报”,并将其发送到 Web 服务所在的服务器。该服务器调用 Web 服务处理此请求。当 Web 服务返回结果(如“温暖、晴”)时,服务器构建一个消息响应,并将其发回应用程序。乍看起来,可能觉得非常复杂——构建消息并发送到需要去的地方。但您在本书中将会看到,Rational® Developer 和 WebSphere 为您处理大部分工作,所以您就可以集中精力开发您的 Web 服务功能和应用程序逻辑了。

在开始构建 Web 服务和 Web 应用程序之前,您需要理解在使用 Rational Developer 和 WebSphere 时会遇到的一些术语。请注意,我们将 IBM® Rational Web Developer 6.0 或 IBM Rational Application Developer 6.0 称为 Rational Developer。与大多数现代技术类似,Web 服务是技术术语的“字母汤”,如果您不小心的话,这些首字母缩写词会使您头眩目转。这里,我们将考察 Web 服务的两个主要构件:SOAP 和 WSDL。

SOAP
SOAP 是一种协议,它定义了用于同 Web 服务进行通信的消息格式。SOAP 消息是 XML 格式的文本串,它由带有消息主体的包和可选头信息组成。头信息用于传送控制信息,主体包含实际请求或响应消息内容。SOAP 消息通常通过 HTTP 传输协议传递,HTTP 是用于网络应用程序的标准网络协议,您在本文中就将使用这一协议。您将很少需要查看 SOAP 消息的实际内容,因为 Rational Developer 和 WebSphere 会为您处理所有这些工作。当您在本书后面部分学习了更多高级特性之后,您会更详细地了解 SOAP 消息,并考虑一些您能设置用来控制如何构建 SOAP 消息的选项。

一个名不符实的首字母缩略词:

SOAP 是一个并不表示任何意义的首字母缩写词。它最初表示“简单对象访问协议 (Simple Object Access Protocol)”,但是由于此协议主要是针对文本消息而不是对象,所以这个意思有些文不切题。有些人开始将 SOAP 称为“面向服务的体系结构协议 (Service-Oriented Architecture Protocol)”,但这并不是其正式定义,至少不是书面的正式定义。

WSDL
Web 服务描述语言 (WSDL) 是一个描述 Web 服务的 XML 词汇表。WSDL 存储在一个扩展名为 .wsdl 的标准文本文件中,这个文件通常位于部署该 Web 服务的相同应用服务器上。作为 Web 开发人员,您使用 WSDL 描述您的 Web 服务所提供的功能,以及其他程序如何访问这些功能。对于要使用您的 Web 服务的其他编程人员,您必须授予他们访问下面两项内容的权限:

  • 您的 Web 服务程序
  • 描述您的 Web 服务的 WSDL 文件

其他编程人员从 WSDL 中知道用于调用您的 Web 服务的 URL、您的 Web 服务处理请求的特定格式、需要提供给每一请求的参数、响应格式,等等。基本上,WSDL 提供了程序为使用您的 Web 服务所必须遵循的全部规则。

作为 Web 应用程序开发人员,您使用特定 Web 服务的 WSDL 来创建代码,该代码定位 Web 服务,构建 Web 服务的消息,并且调用 Web 服务。通常,将所有这些逻辑置于客户机代理,客户机代理代表客户机应用程序中的 Web 服务。您只需要调用该代理,它就会处理查找和调用 Web 服务的所有细节。

幸运的是,您不必非常熟练地使用 WSDL 来创建或处理 Web 服务,因为 Rational Developer 会为您处理所有这些工作。当您使用 Web 服务向导创建一个新的 Web 服务时,向导创建相应的 WSDL 文件。而且当您希望在 Web 应用程序中使用 Web 服务时,您只需要将 Web 服务向导指向该 WSDL 文件,此向导就会创建定位和调用这些服务的客户机代理。

您将构建的内容
现在您已经具备了基本知识,让我们从一个真实的例子开始。您将在本章中扮演两个角色。首先,您会是一名 Web 服务开发人员,使用 Rational Developer 创建一个 Web 服务,它返回某个特定股票代号的交易价格。然后,您将是一名 Web 应用程序开发人员,利用您的 Web 服务构建一个 Web 应用程序来显示一列股票的最终交易价格。图 1.1 显示了您将构建的应用程序的示例。

图 1.1 正在运行的 MyStocks 应用程序
运行中的 MyStocks 应用程序

安装 WebSphere Application Server 和 Rational Developer
要遵循本书中的步骤,您需要安装 IBM WebSphere Application Server 6.0。还需要安装 IBM Rational Web Developer 6.0 或者 IBM Rational Application Developer 6.0。Application Developer 包含所有您将在 Web Developer 中找到的相同功能(而且还会更多),所以您可以按照任何一种产品的说明进行操作。本文中的屏幕截图取自 Rational Web Developer,但是,如果您使用的是 Rational Application Developer,您可能会看到比屏幕截图中更多的元素。您可以在计算机中分别安装 WebSphere Application Server 和 Rational Developer,如果您愿意,您还可以安装 WebSphere Express 6.0,它同时包括 WebSphere Application Server 和 Rational Web Developer。如果您还没有 WebSphere Express 6.0 的副本,您可以下载一个试用版。

设置一个 Web 项目
在您能够创建第一个 Web 服务之前,您需要在 Rational Developer 中做一些设置工作,以启用用于 Web 服务开发的 Workbench 功能,并指定您的 Web 服务将存储在哪里。

Rational Developer 被组织到各种透视图 中,它们仅仅是根据您在开发团队中的角色来看待一个开发项目的不同方式。在本书中,您将主要使用 Web 透视图,而在 Web 透视图中,将根据其内容将您的 Web 服务和应用程序组织到项目和文件夹,例如用于 Java 类的包文件夹。在需要时,您可以切换透视图。在一个特定的透视图中,您还将看到各种不同的编辑器和视图,它们可应用于在该透视图中完成的工作。不要担心——我们会在进行的过程中讲解它们中的每一个是如何工作的。

启动 Rational Developer

  1. 要启动 Rational Developer,请单击 Start => Programs => IBM Rational => Rational Software Development Platform。在您第一次启动 Rational Developer 时,将出现一个窗口,询问您希望将哪个目录作为工作区(也就是 Rational Developer 保存您工作的位置),如图 1.2 所示。

    图 1.2. Workspace Launcher 窗口
    Workspace Launcher 窗口

  2. 保留设置为缺省值的工作区名称,而且如果您希望不要在将来每次启动 Rational Developer 时向您询问这个名称,请选中 Use this as the default and do not ask again 复选框。
  3. 单击 OK。数秒钟后,Rational Developer Welcome 页出现。在 Welcome 页上,您可以单击各种图标来查看 Rational Software Development Platform 的概述、当前版本中有哪些新特性,或者直接进入教程和示例来学习如何使用此工具。我们现在将跳过 Welcome 信息,但您始终可以通过选择 Workbench 菜单中的 Help => Welcome 返回该页。
  4. 单击 Welcome 窗格的 Close 按钮(窗格顶部的 X)。Workbench 出现,如图 1.3 所示。Workbench 初次在 Web 透视图中打开,这就是您处理 Web 服务和 Web 应用程序所需的透视图。

图 1.3. Rational Developer Workbench
Rational Developer Workbench

Application Developer 用户:

如果 Workbench 在 Web 透视图之外的透视图中打开,则在 Worbench 右上方的工具栏选项卡中单击 Open a perspective 图标,然后从透视图列表中选择 Web。如果您在列表中没有看到 Web,单击 Other,在 Select Perspective 窗口中选择 Web,并单击 OK。如果 Web 仍未出现在 Select Perpsective 窗口中,选中 Show all 复选框。

请注意,Workbench 被分为若干工具栏和工作区域。在我们继续进行之前,让我们花点时间来熟悉一下布局。

首先,右上方选项卡中出现的工具栏显示当前打开的每个透视图的图标,如当前显示在 Workbench 中的 Web 透视图  Web icon。在任意给定的时间里,您都可以拥有多个打开的透视图,并且只需要选择其图标就可以从其中的一个切换到另一个。您还可以自定义这一部分工具栏,如将它移到窗口的左边,或者不显示每个图标的文本说明。要进行自定义,请右键单击工具栏选项卡中的任意位置,并从弹出菜单中选择您想要的选项。

接下来,位于 Workbench 顶部的是下拉菜单和一个工具栏,用于在一个特定透视图内进行工作的常见操作。这些菜单和工具栏会根据给定透视图和当前所用的编辑器的可用功能进行调整,所以当您从一个透视图切换到另一个透视图,以及在不同的编辑器中工作时,您将看到这些项目会发生变化。工具栏中包括下拉菜单中可用操作的一个子集,您可以对其进行自定义,以添加、重新组织或去除工具栏操作,使之适合您的首选项。

最后,Workbench 中的工作区域也会根据给定透视图和当前所用的编辑器的可用功能进行调整。在 Web 透视图中,可以使用 Project Explorer 转到 Web 项目中的各个文件夹和文件。当您打开一个特定文件时,用于这种文件类型的编辑器将出现在 Workbench 的中心。例如,当您处理 Java 源文件时,Java Editor 出现,当您处理 web 页时,Page Designer 出现。在其他工作区域显示了任意相关视图。

启用 Workbench 功能
Workbench 提供了 Web 开发人员最可能用到的已启用功能,例如处理 Java 程序和设计 web 页。这简化了您在向导和弹出菜单中看到的缺省选项,所以 Workbench 中就不会乱糟糟地堆满许多一般不会用到的选项。当您需要使用更高级的功能时(例如,当您处理 Web 服务或数据库时),将自动启用附加功能。您还可以通过设置您的 Workbench 首选项来手动启用功能,步骤如下:

  • 选择 Workbench 菜单中的 Window => Preferences
  • 在出现的 Preferences 窗口中,左窗格中的列表显示您可设置首选项的缺省类别集。单击 Workbench 列表旁边的加号,展开 Workbench 首选项的列表,并选择 Capabilities
  • 在右窗格中,您可以看到全部可能的 Wrokbench 功能,其中已经选中了 Web 开发人员的基本功能集。当您在右窗格中选择一个特定功能时,它的说明将出现在列表之下。选择 Web Service Developer 以查看其说明,然后单击 Web Developer 旁边的加号查看这一角色中包含的功能。要启用 Web 服务功能,选中 Web Service Developer 复选框,此窗口如图 1.4 所示。选中这一复选框可启用 Core Database Development 和 Web Services Development,所以已经为您将在第五章处理数据库时的工作准备好了设置。

    图 1.4. 设置 Workbench 功能
    设置 Workbench 功能

  • 正如您在图 1.4 中可以看到的,根据角色对功能进行了分组,如 Web Developer(高级)和 Web Service Developer。应用于多个角色的功能,如 Web Services Development,重复出现于各种角色下。当您为一个角色选中了 Web Services Development 复选框时,就为所有角色启用了此功能。单击 OK

提示:一旦您在 Workbench 中启用了 Web 服务功能,您就可以为处理 Web 服务设置您的首选项。再次选择 Window => Preferences,此时您将看到 Web 服务是您可以为其设置首选项的类别之一。在本书中我们将使用缺省首选项,但是您可能会发现,在您开发自己的 Web 服务时,您会希望自定义一些首选项。

创建项目
接下来,您将使用 Web 透视图来创建一个新的 Web 项目,它将包含您的 Web 服务。您将把此项目创建为一个包含动态内容的 Dynamic Web 项目,如用于您的 Web 服务的 Java 代码。您还将指定一个 EAR 项目(叫作 Enterprise Application),它用于部署和开发一个应用服务器上的 Web 项目。

  1. 要创建该项目,右键单击 Projiect Explorer 中的 Dynamic Web Projects,并从弹出菜单中选择 New => Dynamic Web Project
  2. 输入项目名称 StockQuote。请注意,工作区的项目位置设置为缺省值(即您第一次启动 Rational Developer 时指定的目录)。
  3. 对于第一个 Web 项目,您将更仔细地查看一些在创建过程中将用到的选项。单击 Show Advanced,窗口如图 1.5 所示。对于将在本书中创建的 Web 项目,将使用缺省值。这意味着 Web 服务和应用程序将使用 WebSphere Application Server v6.0 作为其目标服务器,您的 Web 项目将封装在它们自己的 EAR 项目中,上下文根(即用于为项目中的 Web 组件产生 URL 的值)将使用与 Web 项目相同的名称。

    图 1.5. 创建一个 Dynamic Web 项目
    创建一个 Dynamic Web 项目

  4. 单击 Finish

在 Project Explorer 中,单击加号以展开用于 Dynamic Web 项目和 Enterprise Applications 的文件夹的内容。您的 StockQuote 项目将作为 Dynamic Web Projects 下的一个条目出现,其相关 StockQuoteEAR 项目将作为 Enterprise Applications 下的一个条目出现,如图 1.6 所示。

图 1.6. Project Explorer
Project Explorer

Rational Developer 自动为您的项目创建一个缺省文件夹结构,并将几个控制文件放在这些文件夹中。根据关于打包 J2EE 应用程序的规范对项目结构进行设置。Web 项目(就是您放置 Web 服务和应用程序实际内容的地方)使用关于 Web Archive (WAR) 文件的标准结构,也称为 Web 模块。Enterprise 项目使用 Enterprise Archive (EAR) 文件的标准结构。当您创建一个 Dynamic Web 项目时,Rational Developer 将 Web 项目和一个 Enterprise 项目关联起来,并将 Web 项目的 WAR 文件放在 Enterprise 项目的 EAR 文件中,然后将其部署到一个应用服务器。

可以将多个 Web 项目与一个特定的 Enterprise 项目相关联。这样做可以将相关的 Web 模块合并到单个更大的 J2EE 应用程序。幸运的是,您不必记住关于 WAR 和 EAR 文件的全部细节,因为 Rational Developer 会为您进行封装。您只需要将您的 Java 源文件放入 Java Resources 文件夹内的 JavaSource 文件夹中的 Java 包,将用于 Web 页的内容放在 WebContent 文件夹中。Rational Developer 自动为您更新必要的配置和部署信息。

创建一个 Web 服务
对于您的第一个 Web 服务,您将使用 Rational Developer 将一个 Java 类转换为一个 Web 服务。您将使用的 Java 类是我们的 StockQuoteService 示例版本,它随 Rational Developer 一起提供。我们的代码在本书所附带光盘中的解决方案文件夹中。您将在您的 Web 项目中创建一个新的 Java 包,将 Java 源文件导入 Workbench,然后使用 Web 服务向导将 Java 类转换为一个 Web 服务。

导入 Java 源文件
要在您的 Web 项目中创建一个新的 Java 包并导入 Java 源文件,请遵循以下步骤:

  1. 在 Project Explorer 中,右键单击用于 StockQuote 项目的 Java Resources 文件夹中的 JavaSource 文件夹,并从弹出菜单中选择 New => Package
  2. 输入 samples 作为包的名称,如图 1.7 所示。

    图 1.7. 输入包的名称
    输入包的名称

  3. 单击 Finish
  4. 在 Project Explorer 中,右键单击您刚刚创建的示例包,并从弹出菜单中选择 Import
  5. 选择 File system 作为导入源,并单击 Next
  6. 单击 From Directory 字段旁边的 Browse...,浏览本书所附带光盘中的 /solutions/chap01/samples 文件夹。
  7. 单击 OK
  8. 选择 StockQuote.java 作为要导入的文件,并确保仅选择了 Create selected folders,如图 1.8 所示。

    图 1.8. 导入用于 StockQuote.java 的 Java 源代码
    导入用于 StockQuote.java 的Java 源代码

  9. 单击 Finish

在继续进行之前,我们将快速查看一下您刚刚导入的代码。在 Project Explorer 中,展开示例包的内容,右键单击 StockQuote.java,并从弹出菜单中选择 Open(或仅仅双击 StockQuote.java)。Java Editor 打开,并显示源代码,如清单 1.1 所示。

清单 1.1. 用于 StockQuote 示例的源代码

            package samples;
            import java.io.InputStream;
            import java.io.InputStreamReader;
            import java.io.Reader;
            import java.io.StreamTokenizer;
            import java.net.URL;
            /**
            * Java class that gets a stock price quote given a symbol.
            */
            public class StockQuote
            {
            /**
            * Gets the price for a stock.
            *
            * @param the String stock symbol, e.g. "IBM"
            * @return the stock price
            */
            public float getQuote(String symbol) throws Exception {
            URL url = new URL(BASE_URL + symbol);
            // get the quote as a comma separated value string, as in this example:
            // "IBM",80.85,"11/6/2002","2:20pm",-0.68,80.80,81.500,80.10,5697700
            InputStream is = url.openStream();
            Reader reader = new InputStreamReader(is);
            StreamTokenizer st = new StreamTokenizer(reader);
            // get the symbol string token, e.g. IBM
            st.nextToken();
            String outSymbol = st.sval;
            if (!symbol.equalsIgnoreCase(outSymbol)) {
            throw new Exception("Wrong symbol received: " + outSymbol);
            }
            // skip the comma token and get the price number token, e.g. 80.85
            st.nextToken();
            st.nextToken();
            float price = (float) st.nval;
            reader.close();
            return price;
            }
            private String BASE_URL =
            "http://finance.yahoo.com/d/quotes.csv?f=sl1d1t1c1ohgv&e=.csv&s=";
            }
            

您可以看出,StockQuote 类相当简单。调用程序将一个股票代号传递给 getQuote(string) 方法。这一方法使用此股票代号构建一个 URL,以获得来自 finance.yahoo.com 网站的价格信息。然后此方法从网站返回的字符串中提取最新的交易价格,并将数据返回调用程序。当您完成对源代码的查看之后,关闭 Java Editor。

提示:StockQuote 示例使用了由 finance.yahoo.com 网站提供的逗号分隔值 (CSV) 接口。此网站所返回字符串的格式可能会发生变化,所以如果您在运行此代码时遇到问题,请检查 help.yahoo.com/help/us/fin/quote/quote-05.html,以查看该接口是否已经变化,并相应更新该示例。

使用 Web 服务向导
接下来,您将使用 Web 服务向导将 StockQuote 类转换为一个 Web 服务。作为该向导处理的一部分,它将 Web 服务部署到您的 WebSphere Test Environment,所以您将在运行该向导之前启动该服务器。如果您忘记在运行该向导之前启动该服务器,那也没有问题,因为向导会为您启动该服务器。我们只希望按照一个有序的过程来工作,以跟踪服务器何时启动,所以当我们完成之后记着停止此服务器。

  1. 单击 Workbench 中的 Servers 选项卡,并选择 WebSphere Application Server v6.0。这个服务器就是您将用以运行您的 Web 服务和应用程序的 WebSphere Test Environment。
  2. 右键单击 WebSphere Application Server v6.0,并从弹出菜单中选择 Start。片刻之后,您将看到该服务器的状态变为“Starting”,接着变为“Started”。

    提示:要查看服务器的消息记录,请单击 Console 选项卡。这将显示所有详尽的启动消息,以及在将您的 Web 服务和应用程序部署在服务器上并运行时的运行时消息。日志文件本身叫作 SystemOut.log,您可以在安装 Rational Developer 的文件夹(例如,C:/Rational160)下的 runtimes/base_v6/profiles/default/logs/server1 文件夹中找到此日志文件。

  3. 要创建您的 Web 服务,可以右键单击 Project Exporer 中的 StockQuote.java,并从弹出菜单中选择 Web Services => Create Web service
  4. 出现 Web 服务的选项。确保 Web 服务类型设置为 Java bean Web ServiceStart Web service in Web project 复选框被选中以及Create folders when necessary 复选框被选中,如图 1.9 所示。(如果您没有改变您的首选项,这些应当都是缺省设置。)

    提示:Web 服务向导有许多选项,可以控制如何创建一个 Web 服务、如何测试和发布该 Web 服务,以及如何生成和测试应用程序希望使用该服务时所调用的客户机代理。在本书后面的部分中,您将看到许多其他选项。就现在而言,您正在用 Rational Developer 的缺省值创建 Web 服务。这意味着将您的 Web 服务设置为运行在 WebSphere Application Server v6.0 运行时环境中,它是 Rational Developer 的缺省运行时环境。

    图 1.9. Web 服务的选项窗口
    Web 服务的选项窗口

  5. 单击 Finish

几秒钟之后,向导完成。让我们更仔细地查看一下刚刚为您做了哪些工作。首先,注意已经向 StockQuote 项目中添加了几个新的文件和文件夹,如图 1.10 所示。

图 1.10. 运行 Web 服务向导之后的 Project Explorer
运行 Web 服务之后的 Project Explorer

您所看到的是 WebSphere Application Server 将您的 StockQuote 类处理为 Web 服务时所需的控制文件,所以,当一个应用程序发送一个消息来调用该 Web 服务时,服务器知道要做什么。控制文件包括应用程序发现和使用该 Web 服务所需的信息——即 WebContent/WEB-INF/w 文件夹中的 StockQuote.wsdl 文件。WSDL 文件说明 Web 服务提供的操作以及应用程序用以访问 Web 服务的 URL。您将在下一节中使用此文件创建一个客户机代理(即您的应用程序为了使用此 Web 服务所需调用的代码)。

请注意,在 WebContent/wsdl/samples 文件夹中还有此 WSDL 文件的第二个副本。此副本由 Web Services Explorer 和 Web Service Discovery Dialog 等工具使用,在本书后面的部分中您会用到这两个工具。(我们将在下一章更详细地研究 WSDL 文件。但是,如果您希望现在就看一看,那也可以。只要右键单击文件名称,从弹出菜单中选择 Open With => WSDL Editor。您将看到所有的控制信息,它描述了 StockQuote Web 服务及其 getQutote 操作。)

除了创建所有必要的控制文件之外,向导还将您的的 Web 服务部署在 WebSphere Test Environment 中。要查看它,可以单击 Console 选项卡,也可以浏览服务器的 SystemQout.log 文件中的消息。此文件位于您安装 Rational Developer 的文件夹(例如,C:/Rational60)下的 runtimes/base_v6/profiles/default/logs/server1 文件夹中。

您的 Web 服务现在已经可以使用了。在下一节中,您将由 Web 服务开发人员的角色转换为 Web 应用程序开发人员。在该角色中,您将创建一个 Web 应用程序来测试您的 Web 服务。

创建 Web 应用程序
您创建用来测试 Web 服务的 Web 应用程序是一个 JavaServer Page (JSP)。它包含一个 HTML 表格,其中有您最关心的股票代号及其最新交易价格。您将在 WebSphere Test Environment(就是您当前部署 Web 服务的同一服务器)中运行 JSP。

什么是 JSP?
JavaServer Page (JSP) 是一种动态 Web 页,它包含了静态 HTML 元素和 Java 代码的组合。JSP 文件保存为扩展名为 .jsp 的标准文本文件。当一个用户从 Web 浏览器中请求该页时,JSP 被编辑并在一个应用服务器上运行,所得到的输出将返回给用户。

JSP 文件中最常见到的一些元素是 Bean、Scriptlet 和表达式。Bean 是在 JSP 中引用的 Java 类实例。Scriptlet 是当其在 JSP 文件中出现时执行的 Java 代码。表达式 是返回字符串值的 Java 函数,当其出现在 JSP 文件中时,字符串值就插入到生成的 Web 页中。

设置 JSP

  1. 通过右键单击 Project Explorer 中的 Dynamic Web Projects,并从弹出菜单中选择 New => Dynamic Web Project,创建一个名为 StockQuoteClient 的新 Dynamic Web 项目。输入 StockQuoteClient 作为 Web 项目名称,接受高级选项中的缺省值,并单击 Finish。请注意,对于新 Web 项目,您可能已经指定现有的 StockQuoteEAR 项目作为 EAR 项目名称——您可能已经把 Web 服务和 Web 应用程序放在相同 EAR 文件中。您现在没有做这些事情,因为在下一章中,您将仅把 Web 服务(而不包括 Web 应用程序)部署在您的的“产品”应用服务器上。
  2. 在 Project Explorer 中,右键单击用于 StockQuoteClient 项目的 WebContent folder,并从弹出菜单中选择 New => JSP File

    提示:确保您选择了 StockQuoteClient 项目而不是 StockQuote 项目中的 WebContent 文件夹。

  3. 输入 MyStocks.jsp 作为 JSP 文件名称,该窗口如图 1.11 所示。

    图 1.11. 创建一个 JSP 文件
    创建一个 JSP 文件

  4. 单击 Finish。

MyStocks.jsp 文件在 Page Designer 中打开,如图 1.12 所示(如果您看到是 HTML 源代码,而不是设计图面,则单击 Design 选项卡。)

图 1.12. Page Designer 中的一个新 JSP 文件
Page Designer 中的一个新 JSP 文件

提示:要查看您的 Web 页所用的 HTML 和 JSP 源代码,请单击 Page Designer 中的 Source 选项卡。要查看您的 Web 页中的 HTML 元素在 Web 浏览器中的预览,请单击 Preview 选项卡。但是,因为它并未实际运行在一个真正的应用服务器中,所以 Preview 选项卡将不会显示您最终 JSP 元素的样子。

使用 Page Designer
您使用的 Page Designer 非常类似于任何其他图形编辑器。要添加或改变 Web 页中的文本,只需在设计图面中输入即可。要改变一个特定文本字符串的属性,请选择设计图面中的文本,然后在 Properties 视图中设置您希望的数值。Properties 视图出现在 Workbench 的底部,其布局根据您当前在设计图面中所选择的元素而发生变化。

要向 Web 页中添加更复杂的元素,如表格、图像、表单或 JSP 逻辑,请在 Palette 中选择您所需要的元素(图 1.13),将其放在设计图面上,并在 Properties 视图中设置其属性。Palette 包含用于 Web 页的全部常用元素,将其组织为叫作drawer 的相关组中。单击 drawer 的名称以打开它。

图 1.13. Palette 中的 HTML drawer
Palette 的 HTML drawer

提示:Properties 视图应当已经出现在 Workbench 中(单击 Properties 选项卡来查看它),当您用 Page Designer 打开一个文件时,Palette 应当自动出现。要查看一个尚未打开的视图,请使用 Window => Show View

现在,您将使用 Page Designer 为您的 Web 应用程序创建静态内容:

  1. 选择设计图面上的 Place content here,并将文本改为 My Stock List
  2. 在 Properties 视图中,选择 Heading 1 作为文本的 Paragraph 值。
  3. 单击 Palette 中的 HTML Tags,打开 HTML 元素面板。
  4. 选择 Palette 的 HTML 面板中的 Tabletable icon,将其拖到标题下方的设计图面。当提示输入表格的行数与列数时,保持列数为 2,将行数设置为您希望显示的股票数加 1,以显示表头,如图 1.14 所示。您可以在这里设置一些表格属性,如果您愿意,您也可以在将表格拖到设计图面之后,通过编辑 Properties 视图中的数值来设置这些属性。

    图 1.14. Insert Table 窗口
    Insert Table 窗口

  5. 单击 OK。设计图面的外观应如图 1.15 所示。

    图 1.15. 向设计图面中添加 HTML 表格
    向设计图面中添加 HTML 表格。

  6. 下面,您将设置表头数值。在设计图面中,输入股票代号作为在第一个单元格中(第一行、第一列)的文本。应当已经选择第一个单元格;如果未选择,只需要单击它来选择。
  7. 在 Properties 视图中,选择 Header 作为单元格类型。
  8. 在设计图面中选择下一个单元格(第一行、第二列)。输入价格作为这一单元格的文本,在 Properties 视图中,选择 Header 作为单元格类型。
  9. 输入您希望包括在表格中的股票代号的数值,设计图面的外观如图 1.16 所示。

    图 1.16. 设置 HTML 表格的静态文本
    设置 HTML 表格的静态文本

现在已经完成了 Web 应用程序的静态内容。

为 Web 服务创建客户机代理
在这一节,您将使用 Web 服务向导为您的 Stockquote Web 服务创建一个客户机代理,即 Web 应用程序用于调用 Web 服务的代码。要为您的 Web 服务创建客户机代理,您可以在 StockQuote 项目中浏览到 WSDL 文件,并从该项目中的文件启动 Web 服务向导,但是我们将向您说明一条更方便的途径来访问 Workbench 中的 Web 服务。

  1. 在 Project Explorer 中向下滚动,直到看到 Web Services 文件夹,并展开文件夹的内容。注意该文件夹中包含用于 Services 和 Clients 的子文件夹。Services 文件夹内是您的 Workbench 中的 Web 服务(目前只有您的 StockQuote Web 服务),Clients 文件夹中是您的 Workbench 中的全部 Web 服务客户机(目前还没有,但这一情况马上就会发生变化)。
  2. 右键单击 Services 文件夹中的 StockQuoteService,并从弹出菜单中选择 Generate Client。Web Service Client Options 窗口出现,如图 1.17 所示。

    图 1.17. Web Service Client Options 窗口
    Web Service Client Options 窗口

  3. 确保客户机代理类型设置为 Java proxy,而且已经选中 Create folders when necessary 复选框,并单击 Next。Web Service Selection 页将出现,供您从中选择希望创建客户机代理的 WSDL 文件,如图 1.18 所示。

    图 1.18. Web Service Selection 页
    Web Service Selection 页

  4. URI 已设置为用于 StockQuote Web 服务的 WSDL 文件,所以只需单击 Next。Client Environment Configuration 页出现,让您选择用于该客户机的运行时环境(即您的 JSP 所运行的运行时环境)。确保 Web 服务运行时设置为 IBM WebSphere、服务器设置为 WebSphere Application Server v6.0 和 J2EE 版本设置为 1.4。还有,要确保选择 StockQuoteClient 作为 Client 项目(向导将把客户机代理放在该项目中),窗口如图 1.19 所示。

    图 1.19. Client Environment Configuration 页
    Client Environment Configuration 页

  5. 单击 Finish。
  6. 当提示您启用改写 web.xml 文件时,单击 Yes。这使向导添加必要的控制信息,以打包您的 Web 应用程序。就是这样,现在已经创建了您的客户机代理。

在继续之前,让我们更仔细地看一下向导刚刚为您做了什么。展开 StockQuoteClient 项目中 Java Resources 文件夹内的 JavaSource 文件夹中的内容。您将看到它现在包含一个“示例”包,其中有六个 Java 源文件。这些文件是向导利用缺省客户机运行时(即 WebSphere Application Server v6.0 运行时环境)由 WSDL 文件为您生成的客户机代理。如果您选择了一个不同的客户机运行时,所生成的代码可能会有些不同,但其概念仍然是相同的——它们就是应用程序用以访问 Web 服务的类。

客户机代理代码的使用非常简单。首先,您创建了一个代理类的实例,它表示您的 Web 服务——即用于您的 StockQuote Web 服务的 StockQuoteProxy。接着,您调用代理的 getQuote(string) 方法,传递您希望得到其交易价格的股票代号。就是这样。代理类会为您完成定位 Web 服务、发送请求消息以及向您返回响应(股票价格)等全部工作。

在 Web 应用程序中使用客户机代理
让我们返回 Page Designer 以添加 JSP 逻辑,它使用客户机代理来获得股票价格。单击设计图面的任何位置,将焦点返回 Page Designer,然后遵循以下步骤:

  1. 单击 Palette 中的 JSP Tags,打开 JSP 元素 drawer。
  2. 您需要 StockQuoteProxy 类的一个实例(或 bean),选择 Palette 中的 Beanbean icon,并将其拖到设计图面上的表格之前的某个位置。(如果它没有放到正确的区域,您也不用着急——您可以稍后移动它。)
  3. 在出现的 Insert JSP Bean 窗口中,为该 ID 输入 proxy。(这是您以后用以引用此 Bean 的名称。)输入 samples.StockQuoteProxy 作为类的名称,该窗口如图 1.20 所示。

    提示:如果您不想输入完整的类名称,您可以使用 Browse 按钮来定位它。在 Class Selection 窗口中,输入类名称的第一部分,如 Stock。将在一个列表中显示与该模式匹配的项目构建路径中的所有类,您可以从此列表中选择您希望使用的类名称和包名称。

    图 1.20. 向设计图面添加 StockQuoteProxy bean
    向设计图面中添加 StockQuoteProxy

  4. 单击 OK。该设计图面的外观应当如图 1.21 所示。

    图 1.21. 添加到设计图面的 StockQuoteProxy bean
    添加到设计图面的 StockQuoteProxy bean

    现在您已经拥有了 StockQuoteProxy bean 的一个实例,您将添加调用代理的 getQuote(String) 方法的 Java 代码,它获取每个股票代码的价格,并将结果数值插入您的 Web 页中。

    提示:如果 Bean 位于其他某处,如位于一个表格中,则使用鼠标移动它。您将在表格中引用这个 Bean 以获得股票价格,而且在使用 Bean 实例之前需要先创建它。

  5. 选择 Palette 中的 Expression expression icon,并将其放在设计图面上第一个股票价格的表格单元格中。在 Properties 视图中,输入 String.valueOf(proxy.getQuote("symbol")) 作为表达式值,其中符号为股票代码,如我们的示例中第一行所示股票的 String.valueOf(proxy.getQuote("CSCO"))。此代码调用客户机代码获取所指定股票代码的最新交易价格,并将代理返回的浮点数值转换为 String 值。
  6. 为表格中的每个股票代号重复以前的步骤。您的设计图面现在看起来应当如图 1.22 所示,Web 页源代码看起来应当如清单 1.2 所示。

    图 1.22. 具有所有已添加元素的设计图面
    具有所有已添加元素的设计图面

    清单 1.2. 用于 MyStocks Web 应用程序的最终源代码
    
                    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                    <HTML>
                    <HEAD>
                    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"%>
                    <META http-equiv="Content-Type" content="text/html;
                    charset=ISO-8859-1">
                    <META name="GENERATOR" content="IBM Software Development Platform">
                    <META http-equiv="Content-Style-Type" content="text/css">
                    <LINK href="theme/Master.css" rel="stylesheet" type="text/css">
                    <TITLE>MyStocks.jsp</TITLE>
                    </HEAD>
                    <BODY>
                    <H1>My Stock List</H1>
                    <jsp:useBean id="proxy" class="samples.StockQuoteProxy"></jsp:useBean>
                    <TABLE border="1">
                    <TBODY>
                    <TR>
                    <TH>Stock symbol</TH>
                    <TH>Price</TH>
                    </TR>
                    <TR>
                    <TD>CSCO</TD>
                    <TD><%=String.valueOf(proxy.getQuote("CSCO"))%></TD>
                    </TR>
                    <TR>
                    <TD>FNM</TD>
                    <TD><%=String.valueOf(proxy.getQuote("FNM"))%></TD>
                    </TR>
                    <TR>
                    <TD>IBM</TD>
                    <TD><%=String.valueOf(proxy.getQuote("IBM"))%></TD>
                    </TR>
                    <TR>
                    <TD>INTC</TD>
                    <TD><%=String.valueOf(proxy.getQuote("INTC"))%></TD>
                    </TR>
                    </TBODY>
                    </TABLE>
                    </BODY>
                    </HTML>
                    
  7. 要保存您的修改,右键单击设计图面,并从弹出菜单中选择 Save。如果您的 Web 页中有任何错误,它们将会列在 Workbench 底部的 Problems 视图中。将 JSP 文件与清单 1.2 对比,以改正任何错误。

    提示:当您在 Workbench 中进行修改时,您可能注意到窗口底部关于“Building Workspace”或“Publishing EAR file”功能的消息。这些就是 Rational Developer 正在为您做的后台任务。您有时可能会看到您的操作被后台任务阻断的消息。这是正常的,因为有些操作在可以继续进行之前需要后台任务先完成,例如使 Workspace 与您已经完成的工作同步。也可能存在一些情况,您的操作可能未被阻断,但您仍然希望等待后台任务完成,例如在运行 EAR 文件中所包含的 Web 应用程序或 Web 服务之前等待该文件被发布。

运行 Web 应用程序
要运行您的 Web 应用程序,首先确保您有一个活动的 Internet 连接,以使您能够访问 finance.yahoo.com 网站。还有,确保您的 WebSphere Test Environment 仍然处于已启动状态(您的 Web 服务和 Web 应用程序都运行在这个服务器上)。右键单击 Project Explorer 中的 MyStocks.jsp,并从弹出菜单中选择 Run => Run on Server。当提示您选择要启动的服务器时,确保选中 WebSphere Application Server v6.0,并单击 Finish

提示:通过选中 Set server as project default 复选框,您可以在以后运行此 Web 项目中的 Web 应用程序时跳过 Server Selection 窗口。

您的 Web 应用程序在 Web 浏览器窗口中启动,如图 1.23 所示。

图 1.23. 运行在 Web 浏览器窗口中的 MyStocks.jsp
运行在 Web 浏览器窗口中的 MyStocks.jsp

请注意,Rational Developer 对您的 web 页使用标准的 URL 格式,该 web 页位于 http://host:port/context-root/alias。URL 前缀 http://localhost:9080 将 Web 浏览器导向您的 WebSphere Application Server,它正在侦听 9080 端口以接收 HTTP 请求。上下文根是在您创建 Web 项目时指定的数值(StockQuoteClient,与 Web 项目的名称相同)。由于您在 WebContent 文件夹中创建了 JSP 文件,所以 URL 的别名部分就是您的 JSP 文件的名称 (MyStocks.jsp)。

提示:如果您正运行在一个使用防火墙访问 Internet 的内部网中,您可能需要在 Workbench 首选项中指定一个代理服务器以访问 finance.yahoo.com 网站。要指定代理服务器,请选择 Window => Preferences,然后在首选项列表中选择 Internet -- Proxy Settings。选中 Enable proxy 复选框,并输入代理主机名称与端口(您在 Web 浏览器中访问 Internet 时所指定的相同值)。如果代理为 SOCKS 服务器,选中 Use SOCKS 复选框,如果需要,还可以输入用于该代理的身份验证值。

导入解决方案文件
如果您遇到任何问题,请按照本章的说明执行操作,导入位于下载 zip 文件中的解决方案文件。共有两个解决方案文件,一个是关于 Web 服务的,一个是关于 Web 应用程序的。遵循以下步骤导入它们:

  1. 右键单击 Project Explorer 中的 Enterprise Applications,并从弹出菜单中选择 Import => EAR file,以导入关于 Web 服务的解决方案文件。
  2. 单击 Browse 按钮,并浏览到光盘上的 /solutions/chap01 文件夹。选择 Chap01StockQuoteEAR.ear,并单击 Open,Import 窗口如图 1.24 所示(将自动填入项目的名称)。

    图 1.24. 导入 StockQuote Web 服务的解决方案文件
    导入 StockQuote Web 服务的解决方案文件service

  3. 单击 Finish。 如果提示您切换到 J2EE 透视图,单击 No。(为避免以后出现这一提示,选中 Remember my decision 复选框。)在 Project Explorer 中出现两个新项目:Dynamic Web Projects 文件夹中的 Chap01StockQuote 和 Enterprise Applications 文件夹中的 Chap01StockQuoteEAR,分别对应于您自己的 StockQuote 和 StockQuoteEAR 项目。
  4. 重复步骤 1-3,以导入关于 Web 应用程序的 Chap01StockQuoteClientEAR.ear 解决方案文件。
  5. 为将导入的项目部署到您的 WebSphere Test Environment 中,单击 Servers 选项卡。右键单击 WebSphere Application Server v6.0,并从弹出菜单中选择 Add and remove projects
  6. 单击 Add All ,以将新项目移到 Configured 项目列表中,该窗口如 1.25 所示。

    图 1.25. 将导入的项目添加到服务器配置中
    将导入的项目导入到服务器配置中

  7. 单击 Finish。

    提示:您可以通过从所配置项目列表中删除相关 EAR 文件,利用 Add and Remove Projects 向导从 WebSphere Test Environment 中卸载应用程序。

  8. 要运行 Web 应用程序,请右键单击 Chap01StockQuoteClient 项目的 WebContent 文件夹中的 MyStocks.jsp ,并从弹出菜单中选择 Run => Run on Server。当提示选择一个要启动的服务器时,确保选中 WebSphere Application Server v6.0,并单击 Finish

停止 WebSphere Test Environment
当您退出 Rational Developer 时,WebSphere Test Environment 不会自动停止,所以为了释放计算机资源,您应当在不再需要将其用于测试时尝试停止该服务器。请遵循以下步骤:

  1. 单击 Servers 选项卡。
  2. 右键单击 Servers 视图中的 WebSphere Application Server v6.0,并从弹出菜单中选择 Stop
  3. 如果有一个消息提示服务器没有响应,单击 OK 以终止该服务器。服务器的状态由“Started”变为“Stopped”。

回顾
在本章中,您学习了一些与 Web 服务有关的基本术语和概念。您使用 Rational Developer 创建了一个简单的 Web 服务和一个使用此 Web 服务的 Web 应用程序,然后,您用 WebSphere Application Server(Rational Developer 的内置测试环境)运行了该 Web 服务和应用程序。在下一章中,您将创建另一个 WebSphere Application Server 作为您的产品服务器、将您的 Web 服务部署于这一新的服务器中,然后对其进行发布,以使其他编程人员能够发现和使用它。

 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 myfaq.com.cn All rights reserved. www.myfaq.com.cn 版权所有