IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere  >

利用IBM的工具和技术开发、部署 Web 服务: 第三部分

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Greg Flurry (flurry@us.ibm.com), STSM, IBM Emerging Technologies Group, IBM Austin

2001 年 12 月 01 日

该系列教程将介绍如何利用IBM所提供的工具和技术来开发和部署基于 Web 服务的应用。文章着重介绍如何使用IBM WebSphere Studio Application Developer开发和测试 Web 服务和 Web 应用,如何在IBM WebSphere 应用服务器上部署开发好的 Web 服务,以及如何在IBM WebSphere UDDI注册中心中发布和寻找 Web 服务。

© 2001 国际商业机器有限公司。版权所有。

该系列教程将介绍如何利用IBM所提供的工具和技术来开发和部署基于 Web 服务的应用。文章着重介绍如何使用IBM WebSphere Studio Application Developer开发和测试 Web 服务和 Web 应用,如何在IBM WebSphere 应用服务器上部署开发好的 Web 服务,以及如何在IBM WebSphere UDDI注册中心中发布和寻找 Web 服务。

简介

该系列教程的第一部分(参阅 参考资料部分)向我们展示了如何利用 WebSphere Studio Application Developer 来开发 Web 服务以及如何对 Web 服务进行单元测试。该系列教程的第二部分,介绍了如何利用 Application Developer 向 WebSphere UDDI 注册中心预览版发布 Web 服务,使该 Web 服务能够为用户所利用。上一部分还说明了如何在 UDDI 注册中心中查找一个Web 服务,以及利用 Application Developer 创建已发布的 Web 服务的client。 本文,也就是该系列教程的第三部分,将要介绍如何利用 Application Developer 创建并且测试调用 Web 服务的 Web 应用。





回页首


WebSphere Studio Application Developer

WebSphere Studio Application Developer 向应用程序开发人员提供了丰富的功能,其中包括 Web 应用的开发和测试、XML的开发和测试,以及 Web 服务的开发和测试(也是该系列教程的重点)。 本文(该系列教程的第三部分)则侧重于 Application Developer 所集成的多种 Web 应用构件(其中包括 JSps™ 和 JavaBeans™)的编辑器。如果想了解有关 Application Developer 更详细的信息,请参阅该系列教程的第一部分和 参考资料部分。





回页首


创建 Web 应用

在本文中,我们将创建一个展示天气预报的 Web 应用,它用到了我们在第一部分中所创建的 WeatherForecast Web 服务。本文是以 IBM developerWorks 的一篇名为《创建一个完整的 Web 服务》的教程(请参阅 参考资料部分)为基础的。

创建 Web 应用的第一个步骤是创建一个 Web project。它所必需的步骤我们已经在第一部分中详细的介绍了。对于这个 Web project,我们给它取名为 WFClient1,并把它指定在 WFClient1EAR 文件上。

在创建这个 Web project 的过程中,把 xerces.jar<install_path>/plugins/com.ibm.etools.websphere.runtime/lib 添加到 Java™ 编译路径中。

然后从 下载部分所提供的源文件中导入一个名为 WeatherForecastHelper.java 的“helper” JavaBean。这个 bean  有两个用途:它将帮助格式化从 Web 服务返回的 XML 结果,还将缓存这些结果以减少网络传输量。你可以如同在第一部分所介绍的那样把这个 bean 导入到源文件夹中(导入 WFClient1/source/helper/WeatherForecastHelper.java 到你放置源文件的相对路径中)。你会发现这个 bean 在编译时会产生错误,不过不要紧,现在先忽略这些错误。

下一步,你需要获得 WeatherForecast Web 服务的 proxy。第一部分已经介绍了如何通过“Web Services” 向导生成的 WSDL ( Web 服务描述语言)来生成一个 proxy;而第二部分也介绍了如何通过导入 Web 服务的 WSDL 文件来生成 proxy。你只需要从第一部分生成的 WForecase 项目中,或者从第二部分创建的 IWSClient 项目中拷贝 WeatherForecast-service.wsdl 文件,然后按照第二部分所介绍的步骤,在 WFClient1 项目中创建 Web 服务 proxy 即可。请注意你不需要生成一个 sample client。这些操作完成以后,上面所遇到的编译错误将会消失。

现在,我们要创建一个调用(间接的通过 helper 文件和 proxy) WeatherForecast Web 服务的 JSp 页。这个 JSp 文件可以在下载部分找到。你可以按照第一部分介绍的方法把这个 JSp 页导入导 webApplication 文件夹中(也就是导入 WFClient1/webApplication/forecase.jsp 到你放置源文件的相对路径中),或者你也可以利用 Application Developer 的 JSp 编辑器创建一个 JSp 页面。这个 JSp 编辑器将会提供一个模版的 JSp 。

要在“Web project perspective” 中启动这个编辑器,请选择 WFClient项目,然后选择 Create a JSp File(用 Create a JSp File icon图标表示)。在“Create a JSp File”向导中,展开 WFClient1 项目,然后选择 webApplication文件夹。在“File name”域中输入 forecast.jsp 后点击 Finish


图1. Create a JSp File 向导
The Create a JSp File Wizard

无论是导入下载部分所提供的 JSp 文件,还是创建一个新的(空的) JSp 文件,当完成的时候,Web project perspective 的导航视图都会像下图所示。


图2. Application Developer 的 Web project perspective
The Web project perspective in Application Developer




回页首


编辑 JSp 页

Application Developer 提供了一个 JSp 编辑器,它可以极大的简化 JSp 文件的创建。事实上, forecast.jsp 文件就是用这个编辑器生成的。如果你是在编辑导入的 forecast.jsp ,你将会看到图3所显示的“Design”视图。


图3. 在 JSp 编辑器中编辑 forecast.jsp 文件
Editing forecast.jsp in the JSp editor

这一部分提供了如何在 Application Developer 的编辑器中从初始状态创建 forecast.jsp 文件的说明。按照上图创建好一个 JSp 以后,你会看到 Application Developer 打开了这个 JSp 页,并且显示了对这个 JSp 页进行编辑的操作(如图4所示)。请注意你或许需要通过 Toolbar菜单激活一些菜单。作为开始,只需删除 JSp 内容的标志(选中它,并按 Ctrl-x)。


图4. 显示 JSp 编辑操作的 JSp 页
The JSp page displaying the JSp editing operations

这个 JSp 的主要界面是一个表格。选择 Insert Table(以 the Insert Table icon图标表示)来插入一个表格。表格对话框的默认设置,将会创建一个两行两列的表格。这正是我们所需要的,所以我们只需点击 OK即可。你可以看到表格的外框上有一个边界。编辑这个表格的属性(右键点击这个表格然后选择 Attributes,或者选择编辑器的右边的标签名然后选择 Attributes of TABLE。在 Table width域中输入500像素,然后取消 Show border。

现在,编辑表格中左上角的单元格的属性。选中 Cell typeHeader cell,点击 OK。然后键入 State。以同样的操作编辑右上角的单元格,但是要输入 City。到目前为止,这个 JSp 页将会如下图所示。


图5. 目前 JSp 页的样子
What the JSp page now looks like

选中表格中左下角的单元格,然后点击 Insert Form,(the Insert Form icon图标表示)。编辑表单的属性,在 Action域中,输入 forecast.jsp。 选择 post方法,在 Name输入域中键入 dropdown1,然后点击 OK。

选中这个表单,点击 Insert Option Menu(以 the Insert Option Menu icon图标表示)。输入选项元素的属性。在 Name域中输入 state,在 Item域中输入 Select a state,然后点击 Add。这时,在 Item域中输入 <%=shtml%> ,然后点击 Add。在 Choice框中,选择 Select a state。Attributes 页面将会如图6所示。


图6. Attributes 页面
The Attributes pane

选择 Event,在事件的选项中,选择 OnChange。在 Script域中,输入 statepage();。确认一定要有分号,点击 Add,然后点击 OK返回前面的一个对话框。再次点击 OK关闭这个选项菜单。

下边我们要对表格的右下单元格作类似的操作。不过这回是用输入 location1代替 dropdown1;用 location代替 state;用 Select a city代替 Select a state;用 <%=chtml%> 代替 <%=shtml%> use;用 locationpage(); 代替 statepage(); 。在离开选项菜单属性之前,选择 Style。点击 Edit(4),只改变这个标签的样式。在左边的导航框中,点击 Layout。在 Width属于域中,键入 380,然后点击 OK。再点击 OK两次,你将看到如下图所是的样子。


图7. 到目前这个 JSp 页的样子
What the JSp page now looks like

现在让我们给这个 JSp 页添加一些 JavaScript 、Java directives 和 scriptlets。你也可以从本文作提供的下载文件中截取这些内容。选择 page => page properties。在 page title域中输入 Weather Forecast。选择 JSp Tags,在 Tag Type选项菜单中,选择 JSp Directive - page,然后选择 Add。在 Import输入域中,键入:

helper.*,proxy.soap.*,java.io.*,org.w3c.dom.*helper.*,proxy.soap.*,java.io.*,org.w3c.dom.*

点击 OK,然后再次点击 OK

选择 Insert => Script来插入 JavaScript。 在Script 对话框中,输入函数 statepage()locationpage() , 然后点击 OK,你将看到如图8所示的画面。


图8. 到目前这个 JSp 页的样子
What the JSp page now looks like

下一步,我们要通过 jsp:useBean 标签来用到 helper JavaBean。选择 JSp => Insert Bean。在属性对话框的 ID域中输入 forecastHelperClass域中输入 helper.WeatherForecastHelper,并在Scope 下拉菜单中选择 session,然后点击 OK。

选择 JSp => Insert Scriptlet来输入 Java scriptlets 的第一部分。在脚本对话框中,选择 Author Time Visual下面的 Setting。选择 Text单选按钮,输入 Setup proxy。点击右侧的color selector,选择浅蓝色后,点击 OK。现在,你可以拷贝下面的一段 scriptlet 代码:

WeatherForecastproxy forecaster = forecastHelper.getForecaster();
if (forecaster == null)
{
    forecaster = new WeatherForecastproxy();
    forecastHelper.setForecaster(forecaster);
}
    

proxy 安装代码将创建并且保存这个 proxy 的一个实例。点击 OK后,你将看到如下显示的画面:


图9. 到目前这个 JSp 页的样子
What the JSp now looks like

你可以以同样的方法添加其它的 JSp scriptlets : Determine stateGet infoFormat forecast。你也可以以同样的方式输入 JSp 表达式 Display forecast。请注意 Format forecastDisplay forecast要放置在表格的后面。现在,你将看到如下的画面。


图10. 到目前这个 JSp 页的样子
What the JSp now looks like

下面的代码显示了 Determine statescriptlet。它的功能是确保州和城市的信息是合法的。

String parmState = request.getparameter("state");
String parmLoc = request.getparameter("location");
String sessState = (String) pageContext.getAttribute("State",
                   pageContext.SESSION_SCOpE);
String sessLoc = (String) pageContext.getAttribute("Location",
                  pageContext.SESSION_SCOpE);
String html="done";
String state = null;
String location = null;
if ((parmState == null) || (parmState.equals("")))  {
    if (sessState != null) {
        state = sessState;
    }
} else {
    pageContext.setAttribute("State",        parmState, pageContext.SESSION_SCOpE);
    state = parmState;
    // make sure don't try to read invalid city information
    sessLoc = null;
    parmLoc = null;
}
if ((parmLoc == null) || (parmLoc.equals(""))) {
     if (sessLoc != null) {
         location = sessLoc;
     }
} else {
     location = parmLoc;
     pageContext.setAttribute("Location",
        location, pageContext.SESSION_SCOpE);
}
    

一下的代码显示了 Get infoscriptlet,它从 Web 服务获得关于州、城市和预报的信息。

// always get states
Element stateEl = forecastHelper.getStates();
String shtml = forecastHelper.formatStates(stateEl, state);
// get cities as needed
String locations = null;
Element forecast = null;
if (state == null) {
    html="<B><FONT COLOR=\"#FF0000\" SIZE=\"+1\">
       please select state</FONT></B>";
} else {                
    Element cityEl = forecastHelper.getCities(state);
    locations = forecastHelper.formatCities(cityEl, location);
    // get forecast as needed
    if (location == null) {
        html="<B><FONT COLOR=\"#FF0000\"" + 
           "SIZE=\"+1\">please select a city.</FONT></B>";    
    } else {
        try {
            forecast = forecaster.getForecast(state, location);
        } catch (Exception ex) {
            forecast = null;
        }
    }    
}
String chtml = "<option>none</option>";
if (locations != null) {
    chtml=locations;
}
    

在下面一段代码中, Format forecastscriptlet 调用 helper 来格式化预报的显示。由 JSp => Insert Expression创建的 Display forecast表达式是简单的 html。

if (forecast != null) { 
    html = forecastHelper.formatForecast(forecast);
}
    

最后一步是改变 JSp 页的背景颜色,使刚刚创建好的 JSp 页就像上面所显示的那样。选择 page => page properties或者编辑 BODY 元素的属性来改变背景颜色。选择 Background and Text Color标签,在 Background文本输入域中输入 #3afce9然后点击 OK。你将看到如本节开始示所显示的。





回页首


运行 Web 应用

我们已经完成了这个应用的开发,现在可以运行它了。导航视图中,在 forecast.jsp 点击右键,然后选择 Run on Server。Application Developer 会自动的把 WFClient1 EAR 文件部署在 Application Developer 的 WebSphere 测试环境中然后运行这个应用和 Web 服务。下图说明了部署的架构。请注意, Web 服务自身和 Web 服务的 client(应用)使运行在 Application Developer 的环境中的。


图11. Web 服务架构
The Web service architecture

当 JSp 完全编译以后,你将看到如下图所示的画面。


图12. 完全变以后的 JSp 页面
What the compiled JSp looks like

这个页面要求你选择一个州。这里我们选择了 Texas (TX)


图13. 在 JSp 表单中选择 Texas (TX)
Selecting Texas (TX) in the JSp form

这个页面要求你选择一个城市。这里我们选择了 Austin


图14. 在 JSp 表单中选择 Austin
Selecting Austin in the JSp form

如果你运行这个 Web 应用时没有连接到 Internet,你可以编辑 WForecast 项目的 forecast.properties 文件(请参阅第一部分)的 OFFliNE 属性。如果你这么做了,你需要重新启动运行这个 Web 服务的 WebSphere 应用服务器4.0版。最简单的做法是选择(或者打开) Server perspective,然后选择 Server Control panel视图。在 WebSphere v4.0 Test Environment上点击右键,然后选择 重新启动(Restart)。





回页首


总结

本文介绍了用 WebSphere Studio Application Developer 创建和测试调用 Web 服务的 Web 应用的必要步骤。Application Developer 集成了构建 JSp 页面和 JavaBeans 的工具,用它们可以创建 Web 应用。它还提供了测试的应用服务器环境,这使得创建和测试 Web 应用十分方便。



参考资料

  • 该系列教程的 第一部分描述了如何利用 Application Developer 创建一个 Web 服务。

  • 该系列教程的 第二部分介绍了如何利用 Application Developer 来发布和导入一个 Web 服务。

  • 该系列教程的 第四部分说明了如何将完成的 Web 服务部署到 WebSphere 应用服务器4.0版的投产环境中以及如何运行调用该 Web 服务的应用。

  • IBM developerWorks 教程, 《创建一个完整的 Web 服务》,提供了有关 Web 服务范例的解释,并且讨论了本文提到的工具的早期版本。


关于作者

Greg Flurry 是一个 STSM,目前在 IBM 的新兴技术组中工作。他的主要责任就是促进 IBM 的电子商务技术,特别是 IBM 的 Web 服务技术。你可以通过 flurry@us.ibm.com和他联系。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?







回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款