编写人:Tim Boudreau,维护人:Ruth Kusterer
Java Card 是一个使用起来非常有趣的平台 - 在智能卡上运行的 JVM 以及手掌大小的微型设备,无不令开发过程充满乐趣。Java Card 自版本 3.0 起分为两种类型:
要学完本教程,您需要具备以下软件和资源:
软件或资源 | 要求的版本 |
---|---|
NetBeans IDE | 6.9 |
Java Card SDK | 3.02 |
适用于 NetBeans 的 Java Card 插件 | 1.3 |
Java 开发工具包 (JDK) | 版本 6 |
由于智能卡没有用户界面,因此您需要一个用于在卡上读写数据的智能卡读卡器,或者使用 Java Card 引用实现 (RI) 中包含的仿真器。本教程将使用仿真器。
注:Java Card 插件适用于任何操作系统,但 Java Card 引用实现仿真器只可用于 Windows。不过,您也可以在其他操作系统上将其设置为 Java 平台,方法是将 NetBeans 指向 RI 在 Mac 或 Linux 系统上的 Windows 分区中的安装,但您不能使用此设置运行项目。
如果从插件管理器下载了 Java Card 3.0.2 运行时包,则已将 Java Card SDK 设置为平台。但是,如果从 java.sun.com 下载并安装了平台,则可以使用 "Tools"(工具)> "Java Platforms"(Java 平台)菜单将 Java Card 平台添加到 IDE 中,具体的操作方法与注册任何 Java 平台相同。
设置 Java Card 平台后,IDE 的 "Services"(服务)标签中会列出该平台。如果未显示 "Services"(服务)标签,请从菜单中选择 "Windows"(窗口)> "Services"(服务)。
一个“平台”可以有多台“设备”。您可以将项目部署到特定平台的特定设备上。
从菜单中选择 "File"(文件)> "New Project"(新建项目),然后单击 "Java Card" 类别。此处有多种 Java Card 项目可供您创建。所有这些项目与 NetBeans Java SE 项目一样,都使用 Apache Ant 构建。
传统的小应用程序项目为较小的设备创建传统的 Java Card 小应用程序,这与 Java Card 2.0 和更早版本中使用的小应用程序类似。传统的库项目类似于传统的小应用程序项目,它没有小应用程序,是您希望存放在设备上且可在小应用程序之间共享的一些代码。
扩展的小应用程序和库项目使用 Java Card 3.0 中的扩展 API,以便您能够使用 java.lang.String 等。传统项目和扩展项目的引导类路径有所不同,例如,传统项目的代码完成不显示 java.lang.String,但扩展项目的代码完成却显示 java.lang.String。
Web 应用程序项目或许是 Java Card 3.0 最酷的功能。您可以获得实现 Servlet 的框架项目,并且可以访问完整 Servlet API。这比使用任一类型的小应用程序式应用程序要简单得多 - 您在客户端上无需任何特殊代码,即可与设备上运行的应用程序进行交互,此操作只需一个 Web 浏览器而已!您可以使用引用实现和桌面 Web 浏览器在本地测试应用程序。
对于本教程,我们将创建一个新的 Web 项目。
在新的 Web 项目中,输入 "Card Web Application" 作为项目名称,并将项目位置设置为 NetBeansProjects 目录。单击 "Finish"(完成)后,该项目出现在 "Project"(项目)标签中。
右键单击 "Project"(项目)标签中的项目节点,然后从上下文菜单中选择 "Properties"(属性)。在 "Project Properties"(项目属性)窗口的 "Run"(运行)部分中,您可以更改项目所部署到的平台和设备。单击 "Close"(关闭)以保存更改。
Java Card Web 应用程序的使用与部署到 Servlet 容器的任何其他 Web 应用程序类似。按工具栏上的 "Run"(运行)按钮,以运行 "Hello World" 样例。运行 Java Card Web 应用程序时,将打开一个 Web 浏览器窗口,其中显示 Servlet 的输出:Hello from webapplication1.MyServlet。
运行小应用程序类型的项目时,NetBeans IDE 将提供两个有用的界面:命令行输出和 Java Card 控制台。使用此控制台可与小应用程序进行交互:您可以发送十六进制数据并读取回复。
提示:RI 包含可在 NetBeans IDE 中打开和运行的更多样例项目。
Java Card 有两个令人不可思议的特性,这在其他 Java 平台中都不曾遇到过:
这两项特性都有些复杂,不过,NetBeans 插件可以最大限度地简化其操作,如下所示:
当创建项目时,将会自动为小应用程序 AID、传统的包 AID 和实例 AID 生成合理的值。
在 "Project Properties"(项目属性)对话框中选择 "Applets"(小应用程序)标签后,项目将扫描其类路径,以查找所有 Java Card 小应用程序子类:
找到子类后,便可以在该对话框中选择实际部署的小应用程序,并定制所用的 AID 值、部署参数等。IDE 会验证您输入的所有数据,以便确保不存在任何无效数据:
如果要部署同一小应用程序的两个实例,则可以进行此设置;但是,对于仅需部署一个小应用程序实例的简单情况,则不需要考虑此设置:
要测试处于运行状态的小应用程序,您无需手动编写整个 APDU 脚本,使用内置控制台即可直接与部署的小应用程序进行交互:
传统项目(这些项目只允许包含一个 Java 包)的“包 AID”也由 IDE 生成,不过可以定制。
项目中的所有 AID 值有一部分将是 ISO 指定的供应商 ID(称为 RID)。为快速着手操作,IDE 会生成一个随机 RID 值,以便进行开发和测试。如果您有正式的 RID,则可以在 "Tools"(工具)> "Options"(选项)中输入该 RID,以便将其用于所有的新项目。单击 "Project Properties"(项目属性)中的 "Generate"(生成)按钮,可以更新现有项目中的值。
目前,工具仅支持 Java Card 3.0.2 引用实现,但是,这些工具有一个可扩展的 API,可用于集成供应商卡。平台和设备定义仅仅是由构建脚本导入的属性文件。
部署将通过由卡供应商提供的一组 Ant 任务来完成。这意味着创建的项目可以在 IDE 外部运行,而不存在任何锁定。Ant 任务的源文件(Java Card RI 的一部分)以及现成的 NetBeans 样例项目可以从 Java Card 项目门户下载。
您是创建 Java Card 部署工具的卡供应商吗?请联系插件的创建者 Tim Boudreau ,以获取有关如何集成卡的详细信息!根据您要在 IDE 内为卡提供多少支持,可以在多个级别进行集成。