Java Solaris 加入Sun中国技术社区 我的社区 注册说明
 
JDK 6.0 API 中文版
 
 
 
 
Java API 文档中文版
学习 JavaFX Script ,第 3 部分:使用 JAX-WS 进行客户机-服务器通信
 
By Robert Eckstein, 3/27/08  

本系列文章的 第 1 部分 向 Java 技术的程序员介绍了 JavaFX Script 编程语言的语法和语义。接下来的 第 2 部分 演示了如何使用 Java 的远程方法调用(RMI)技术利用助手类实现简单的客户机-服务器连接。

RMI 是一个很好的原始工具,但是在真实世界的使用中它确实有一些局限性。在 Internet 上创建客户机-服务器工具更加常见的解决方案是利用针对服务架构(SOA),例如 用于 XML Web 服务的 Java API (JAX-WS)。本文将采用本系列前一篇文章向您展示的如何使用 RMI 的相同方式,利用 JAX-WS2.1 使用 JavaFX Script 如何访问 web 服务。

使用 NetBeans IDE 5.5.1 导出一个服务器类作为 Web 服务

由使用 JAX-WS 2.1 创建一个简单 web 服务开始这个任务。你首先需要一个类,它包含了一个或多个您希望导出 web 服务的方法 。为了简单起见,你可以使用该系列文章第 2 部分中的服务器代码,如代码示例 1 所示:

代码示例1
package server;

import java.io.*;

public class ServerImpl {

    private String name;

    public ServerImpl() {
        super();
    }

    public String ping(String s) {
        return "Hello " + s;
    }

}

 

为了导出这个方法,你需要做两件事情:添加一个导入 javax.jws.WebService 包的语句,以及在开始处添加 @WebService 注释,告诉 Java 解释器你打算把这个类的方法发布为一个 web 服务。这些新增的代码在代码示例 2 中以粗体显示:

代码示例2
package server;

import java.io.*;
import javax.jws.WebService;

@WebService

public class ServerImpl {

    private String name;

    public ServerImpl() {
        super();
    }

    public String ping(String s) {
        return "Hello " + s;
    }

}

 

这时,就可以将 web 服务发布到应用服务器上。本文讨论如何在 NetBeans IDE 5.5.1 中发布 web 服务。如果你想在 Java SE 6 平台中在 IDE 之外,使用内嵌的服务器创建 web 服务,那么可以浏览这篇文章 《 在 Java SE 6 平台上的 JAX-WS 2.0 介绍,第 1 部分》

  1. 选择 File > New Project 选项。应该可以看到如图 1 所示的对话框:
     
    NetBeans IDE 5.5.1 NewProject 对话框
    图 1. NetBeans IDE 5.5.1 NewProject 对话框
     
  2. 在 Categories 栏中,选择 Web。在 Projects 子窗口中,选择 Web Application。单击 Next 按钮,应该看到如图 2 所示页面:
     
    New Web Application 对话框
    图 2. New Web Application 对话框
     
  3. 在 Project Name 字段中,键入 WebServiceExample。注意将 web 应用程序的上下文根改为同样的名字。另外,如果 Set Source Level to 1.4 是选中状态,则取消对其选择源代码的级别必须是 1.5 或者更高,这样才能把 web 服务添加到项目中。最后,单击 Finish 按钮。如果不小心点击了 Next 按钮,NetBeans IDE 会向您提供选择不同的框架。只需忽略这些框架,按下 Finish 按钮即可。
     
    此时对话框应该关闭,你应该看到 WebServiceExample 项目被添加到了左上方的 Projects 子窗口中,如图 3 所示:
     
    包含 WebServiceExample 项目的 NetBeans IDE 5.5.1 Projects 子窗口
    图 3. 包含 WebServiceExample 项目的 NetBeans IDE 5.5.1 Projects 子窗口
     
  4. 接下来,左键单击 WebServiceExample 项目的名称以选中。也就是,单击左侧图标为小地球的根节点。右键单击,然后选择 New -> Web Service...... 应该可以看到如图 4 所示的对话框:
     
    New Web Service
                对话框
    图 4. New Web Application 对话框
     
  5. 在 Web Service Name 字段中,键入 ExampleService。在 Package 字段中,键入 ws。选中 Create an Empty Web Servie 单选按钮,单击 Finish 按钮。NetBeans IDE 将会产生空的 web 服务源代码。
     
    假如使用 JAX-WS 2.0,您也许会注意到 NetBeans IDE 创建的注释比本文前面介绍的 @WebService 注释稍微复杂一些。请不用担心 —— 这些参数和附加注释将帮助您完善 Java SE 6 或 JAX-WS 2.0 发布 web 服务的方式。然而,功能与默认的仍旧一致。
     
  6. 更改类的源代码以便和代码示例 3 相匹配。
     
    代码示例3
    /*
     * ExampleService.java
     *
     * Created on August 17, 2007, 2:03 PM
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
    
    package ws;
    
    import java.io.*;
    import javax.jws.WebService;
    
    @WebService
    
    public class ExampleService {
    
        private String name;
    
        public ExampleService() {
            super();
        }
    
        public String ping(String s) {
            return "Hello " + s;
        }
    
    }
     
  7. 要部署本示例,在 Projects 子窗口中再次右键单击 WebServiceExample,如图 3 所示,这次选择 Deploy Project 菜单项。这将会启动应用服务器,编译 web 服务,并部署它。当一切成功完成时,打开浏览器,输入如下的地址:
     
    http://localhost:8084/WebServiceExample/ExampleService
     
    注意 NetBeans IDE 5.5.1 默认的应用服务器是 Apache Tomcat,其默认的部署端口是 8084,并不是许多 web 服务器使用的 8080。浏览器设置为本地主机 URL 后,应该在 web 浏览器中看到类似图 5 的表格,表示 web 服务处于活动状态。
     
    运行在本地计算机上的示例 Web 服务
    图 5. 运行在本地计算机上的示例 Web 服务
     
    您还可以单击链接,显示 web 服务的 Web Service Definition Language(WSDL)文件。如果您不理解该 WSDL 文件的内容,也不必为此而担心。完成本指南并不需要理解它。

WSDL 是什么?

Web 服务定义语言 ( WSDL,经常拼为 “whiz-dull” ) 文件是创建可以与 web 服务通信的客户机的工具。WSDL 描述了 web 服务的公共接口。它是一个为协议而提供的基于 XML 的服务描述,以及要求与其目录中列出的 web 服务相交互的消息格式。所支持的操作和消息被抽象地描述,并被绑定到具体网络协议和消息格式。

 

使用 GlassFish 服务器或者 Sun Java 系统应用服务器 9

如果你想使用 GlassFish 服务器或者 Sun Java 系统应用服务器 9 (SJSAS 9) 代替默认的 Tomcat 服务器,请确保已经事先在 NetBeans IDE 中下载、安装并注册了该服务器。在 本篇出色的文章 后面的部分,你可以找到如何逐步设置 GlassFish 服务器的说明。针对本文的目的,是保证在 New Web Applications 对话框的 Server 字段中指定合适的应用服务器,如图 2 所示。注意默认的端口根据应用服务器的不同而不同。要了解更多细节,请查看应用服务器的文档。

在 NetBeans IDE 5.5.1 中创建一个 JavaFX Web 服务客户机

此时,你可以在 NetBeans IDE 5.5.1 中执行下面的步骤,创建 web 服务客户机的库。当创建客户机时,无论你使用 Java SE 6 mini-web 服务器、与 NetBeans IDE 绑定的 Tomcat 服务器,还是 SJSAS 9 或者 GlassFish 服务器都没有关系。然而,服务器 一定要在运行中 ,以便让 NetBeans IDE 5.5.1 可以访问 WSDL 文件。

  1. 选择 File > New Project 选项。你应该看到类似图 6 的对话框。从 Projects 类别中选择 Java Class Library,单击 Next 按钮。
     
    创建一个新的 Java 项目
    图 6. 创建一个新的 Java 项目
     
  2. 在 Project Name 字段中,键入 JavaFXWebServiceClient,如图 7 所示。注意,在 NetBeans IDE 5.5 中有一个缺陷,可能会阻止您在项目文件中创建路径包含空格的 web 服务客户机。所以,例如,路径不能是 C:\Documents and Settings\...。然后单击 Finish 按钮。
     
    创建一个新的 Java 类库
    图 7. 创建一个新的 Java 类库
     
  3. 这将会在 Projects 子窗口中创建一个 JavaFXWebServiceClient 项目,如先前图 3 所示。右键单击项目节点,选择 New -> Web Service Client 选项。选择 WSDL 作为 Project 的位置,单击 Project 条目字段右边的 Browse 按钮。您应该可以看到图 8 中所示的对话框:
     
    浏览在 WebServicesExample 项目中的 Web 服务
    图 8. 浏览在 WebServicesExample 项目中的 Web 服务
     
  4. 浏览您希望使用的 web 服务。选择 web 服务 ExampleService,并单击 OK 按钮。然后您将会看到图 9 所示的对话框。注意,你还可以手动指定一个本地文件或者 WSDL 位置的 URL。
     
    新的 Web 服务客户机对话框
    图 9. 新的 Web 服务客户机对话框
     
  5. 在 Package 字段中键入 ws,单击 Finish 按钮。Projects 子窗口显示新的 web 服务客户机,如图 10 所示。
     
    在 Projects 子窗口中的新的 Web 服务客户机项目
    图 10. 在 Projects 子窗口中的新的 Web 服务客户机项目
     
  6. 接下来,在 ws 包里创建一个称作 ConnectionHelper 的 Java 文件,如代码示例 4 所示。
     
    代码示例4
    package ws;
    
    public class ConnectionHelper {
    
        public static ws.ExampleService getWSConnection() {
    
            try {
    
                ws.ExampleServiceService service = new ws.ExampleServiceService();
                return service.getExampleServicePort();
    
            } catch (Exception ex) {
                // TODO handle custom exceptions here
            }
    
            return null;
         }
    
    }
     
  7. 你可以重用在 本系列第二部分 中的相同 JavaFX Script 代码,以同样的方式创建一个称作 ws.MyClient.fx 的文件。也就是,在 ws 包上左键单击,选择 New→JavaFX File,打开图 11 所示的对话框。
     
    创建一个新的 JavaFX Script 文件
    图 11. 创建一个新的 JavaFX Script 文件
     
  8. 事实上,唯一的变化是对 ConnectionHelper 类的静态 getWSConnection() 方法的调用,以及显示的文本。代码示例 5 给出了源代码,变化使用粗体标出。
     
    代码示例5
    import java.lang.*;
    import javafx.ui.*;
    import java.rmi.*;
    
    import ws.ExampleService;
    import ws.ConnectionHelper;
    
    class ButtonClickModel {
        attribute numClicks: Number;
    }
    
    var model = new ButtonClickModel();
    
    var win = Frame {
        width: 200
        content: GridPanel {
            border: EmptyBorder {
               top: 30
               left: 30
               bottom: 30
               right: 30
            }
            rows: 3
            columns: 1
            vgap: 10
            cells:
              [  Button {
                     text: "Click to make Web Services connection!"
    
                     mnemonic: I
                     action: operation() {
    
                         do {   //  Do statements are executed off the EDT
    
                             try {
    
                                 var remoteServer:ExampleService =
                                     ConnectionHelper.getWSConnection();
    
                                 var results = remoteServer.ping("Test");
                                 System.out.println("response: {results}");
                                 model.numClicks++;
    
                             } catch (e:Exception) {
                                 System.out.println("exception: {e}");
                             }
                         }
                     }
                 },
    
                 Label {
                     text: bind "Number of WS connections: {model.numClicks}"
    
                 }
              ]
        }
        visible: true
    };
     
  9. 使用 本系列第 2 部分中 同样的步骤修改 JavaFXWebServiceClient 属性以便在执行项目时运行 JavaFX Script 客户机。步骤如下:
     
    • 在 Project 窗口中,右键单击项目节点,选择 Properties 选项。
    • 在 Properties 对话框的 Categories 面板中选择 Run 选项。
    • 确保引用的 Main Class 是 net.java.javafx.FXShell
    • 在 Arguments 字段中输入脚本的名称 ws.MyClient。并单击 OK 按钮。
     
    作为参考,图 12 显示了 Project Properties 对话框的 Run 类别的屏幕截图。
     
    Project Properties 对话框的 Run 类别
    图 12. Project Properties 对话框的 Run 类别
     
  10. 最后,右键单击项目节点,然后选择“Run Project”。输出窗口现在应该如图 13 所示。
     
    运行 JavaFX Script  Web 服务客户机项目
    图 13. 运行 JavaFX Script Web 服务客户机项目
     

此时,对于 JavaFX 脚本如何与 NetBeans IDE 5.5.1 结合使用以达到与服务器跨网络通信,无论是通过 JAX-WS 2.1,还是 RMI,你都应该有一个深入的理解了。如果你想了解更多利用 JavaFX Script 创建 GUI 的信息,可以参考本文 更多详细信息 部分中针对 Swing 程序员的教程。另外,记住 JavaFX 规范仍然在开发中,因此语言的参数可能不时会发生改变。请参看 OpenJFXOpenJFX Compiler 网站获得最新的消息。

更多详细信息