| // |
| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| // |
| |
| = Java Card 开发快速入门指南 |
| :jbake-type: tutorial |
| :jbake-tags: tutorials |
| :jbake-status: published |
| :icons: font |
| :syntax: true |
| :source-highlighter: pygments |
| :toc: left |
| :toc-title: |
| :description: Java Card 开发快速入门指南 - Apache NetBeans |
| :keywords: Apache NetBeans, Tutorials, Java Card 开发快速入门指南 |
| |
| image::images/java-smart-card-sm.jpg[] |
| |
| _编写人:Tim Boudreau,维护人:Ruth Kusterer_ |
| |
| Java Card 是一个使用起来非常有趣的平台 - 在link:http://en.wikipedia.org/wiki/Smart_card[+智能卡+]上运行的 JVM 以及手掌大小的微型设备,无不令开发过程充满乐趣。Java Card 自版本 3.0 起分为两种类型: |
| |
| *传统*::: 这种类型与 Java Card 的早期版本一样。平台功能极其受限。例如,不存在 ``java.lang.String`` ,也没有 ``java.lang.Object.hashCode()`` 方法和浮点数。 |
| *扩展*::: 适用于更新、更强大的智能卡 - 这是 Java Card 3.0 中的新增功能。它支持 Java 平台更为全面的实现。最酷的恐怕就是它在本机支持 Servlet 的功能了 - 实际上,您使用熟悉的 API 就能编写在智能卡上运行的 Web 应用程序! |
| |
| |
| |
| |
| |
| == 要求 |
| |
| *要学完本教程,您需要具备以下软件和资源:* |
| |
| image::../../../images_www/articles/68/netbeans-stamp.gif[title="此页上的内容适用于 NetBeans IDE 6.8 和 6.9"] |
| |
| |=== |
| |软件或资源 |要求的版本 |
| |
| |link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |6.8 |
| |
| |link:http://java.sun.com/javacard/downloads/index.jsp[+Java Card SDK+] |3.02 |
| |
| |适用于 NetBeans 的 Java Card 插件 |1.3 |
| |
| |link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java 开发工具包+] (JDK) |版本 6 |
| |=== |
| |
| |
| == 设置项目环境 |
| |
| 由于智能卡没有用户界面,因此您需要一个用于在卡上读写数据的智能卡读卡器,或者使用 Java Card 引用实现 (RI) 中包含的仿真器。本教程将使用仿真器。 |
| |
| *注:*Java Card 插件适用于任何操作系统,但 Java Card 引用实现仿真器只可用于 Windows。不过,您也可以在其他操作系统上将其设置为 Java 平台,方法是将 NetBeans 指向 RI 在 Mac 或 Linux 系统上的 Windows 分区中的安装,但您不能使用此设置运行项目。 |
| |
| |
| === 在 NetBeans IDE 中安装插件 |
| |
| 1. 下载并安装 NetBeans IDE 6.8。 |
| 2. 安装完成后,转至 "Tools"(工具)> "Plugins"(插件)菜单。 |
| 3. 在 "Available Plugins"(可用插件)下,有两个与 Java Card 相关的插件:Java Card 和 Java Card 运行时包。 |
| * Java Card 插件用于在 NetBeans IDE 中添加 Java Card 项目支持。 |
| * 仅当您尚未安装 Java Card 引用实现的副本时,才需要 Java Card 3.0.2 运行时包。 |
| |
| image::images/install-javacard-plugins.png[] |
| |
| 4. 安装插件后,需要重新启动 IDE 才能继续执行下面的教程步骤。 |
| |
| |
| === 注册 Java Card 平台 |
| |
| 如果从插件管理器下载了 Java Card 3.0.2 运行时包,则已将 Java Card SDK 设置为平台。但是,如果从 link:http://java.sun.com/javacard/devkit/[+java.sun.com+] 下载并安装了平台,则可以使用 "Tools"(工具)> "Java Platforms"(Java 平台)菜单将 Java Card 平台添加到 IDE 中,具体的操作方法与注册任何 Java 平台相同。 |
| |
| image::images/installPlatform.png[] |
| |
| 设置 Java Card 平台后,IDE 的 "Services"(服务)标签中会列出该平台。如果未显示 "Services"(服务)标签,请从菜单中选择 "Windows"(窗口)> "Services"(服务)。 |
| |
| image::images/services-tab.png[] |
| |
| 一个“平台”可以有多台“设备”。您可以将项目部署到特定平台的特定设备上。 |
| |
| |
| == 了解 Java Card 项目类型 |
| |
| 从菜单中选择 "File"(文件)> "New Project"(新建项目),然后单击 "Java Card" 类别。此处有多种 Java Card 项目可供您创建。所有这些项目与 NetBeans Java SE 项目一样,都使用 link:http://ant.apache.org/[+Apache Ant+] 构建。 |
| |
| image::images/choose-project-type.png[] |
| |
| 传统的小应用程序项目为较小的设备创建传统的 Java Card 小应用程序,这与 Java Card 2.0 和更早版本中使用的小应用程序类似。传统的库项目类似于传统的小应用程序项目,它没有小应用程序,是您希望存放在设备上且可在小应用程序之间共享的一些代码。 |
| |
| 扩展的小应用程序和库项目使用 Java Card 3.0 中的扩展 API,以便您能够使用 java.lang.String 等。传统项目和扩展项目的引导类路径有所不同,例如,传统项目的代码完成不显示 java.lang.String,但扩展项目的代码完成却显示 java.lang.String。 |
| |
| image::images/create-applet-app.png[] |
| |
| Web 应用程序项目或许是 Java Card 3.0 最酷的功能。您可以获得实现 Servlet 的框架项目,并且可以访问完整 Servlet API。这比使用任一类型的小应用程序式应用程序要简单得多 - 您在客户端上无需任何特殊代码,即可与设备上运行的应用程序进行交互,此操作只需一个 Web 浏览器而已!您可以使用引用实现和桌面 Web 浏览器在本地测试应用程序。 |
| |
| image::images/create-web-app.png[] |
| |
| |
| == 使用项目 |
| |
| 对于本教程,我们将创建一个新的 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`` 。 |
| |
| image::images/editor.png[] |
| |
| 运行小应用程序类型的项目时,NetBeans IDE 将提供两个有用的界面:命令行输出和 Java Card 控制台。使用此控制台可与小应用程序进行交互:您可以发送十六进制数据并读取回复。 |
| |
| 提示:RI 包含可在 NetBeans IDE 中打开和运行的更多样例项目。 |
| |
| image::images/run-customizer.png[] |
| |
| |
| == 使用特殊的插件功能 |
| |
| Java Card 有两个令人不可思议的特性,这在其他 Java 平台中都不曾遇到过: |
| |
| *应用程序标识符 (AID)*:: 这些唯一标识符类似于 //aid//720A75E082/0058AEFC20。十六进制数值的第一部分是供应商 ID(需从link:http://iso.org/[+国际标准化组织 (ISO)+] 获得);第二部分是您想出来的一个唯一值。AID 用来标识小应用程序类、Java 包(仅传统的小应用程序和库项目)以及小应用程序的唯一实例(您可以在一个设备上多次部署相同的小应用程序,使用实例 AID 可以选择要将信息发送给哪个小应用程序)。 |
| *APDU 脚本*:: 这些脚本用于向小应用程序发送数据。它包含过多需手动键入的十六进制数值;该脚本需要选择一个特定的小应用程序实例,然后向该实例发送数据。您也可以使用 Java Card 控制台,而不是发送预先编写的脚本。 |
| |
| 这两项特性都有些复杂,不过,NetBeans 插件可以最大限度地简化其操作,如下所示: |
| |
| * 当创建项目时,将会自动为小应用程序 AID、传统的包 AID 和实例 AID 生成合理的值。 |
| |
| * 在 "Project Properties"(项目属性)对话框中选择 "Applets"(小应用程序)标签后,项目将扫描其类路径,以查找所有 Java Card 小应用程序子类: |
| |
| image::images/customize-applets-pre.png[] |
| |
| * 找到子类后,便可以在该对话框中选择实际部署的小应用程序,并定制所用的 AID 值、部署参数等。IDE 会验证您输入的所有数据,以便确保不存在任何无效数据: |
| |
| image::images/customize-applets.png[] |
| |
| * 如果要部署同一小应用程序的两个实例,则可以进行此设置;但是,对于仅需部署一个小应用程序实例的简单情况,则不需要考虑此设置: |
| |
| image::images/customize-instances.png[] |
| |
| * 要测试处于运行状态的小应用程序,您无需手动编写整个 APDU 脚本,使用内置控制台即可直接与部署的小应用程序进行交互: |
| |
| image::images/open-console.png[] |
| |
| image::images/shell.png[] |
| |
| * 传统项目(这些项目只允许包含一个 Java 包)的“包 AID”也由 IDE 生成,不过可以定制。 |
| |
| image::images/create-project-package-aid.png[] |
| |
| * 项目中的所有 AID 值有一部分将是 ISO 指定的供应商 ID(称为 RID)。为快速着手操作,IDE 会生成一个随机 RID 值,以便进行开发和测试。如果您有正式的 RID,则可以在 "Tools"(工具)> "Options"(选项)中输入该 RID,以便将其用于所有的新项目。单击 "Project Properties"(项目属性)中的 "Generate"(生成)按钮,可以更新现有项目中的值。 |
| |
| image::images/global-rid.png[] |
| |
| |
| == 集成第三方 SDK |
| |
| 目前,工具仅支持 Java Card 3.0.2 引用实现,但是,这些工具有一个可扩展的 API,可用于集成供应商卡。平台和设备定义仅仅是由构建脚本导入的属性文件。 |
| |
| 部署将通过由卡供应商提供的一组 Ant 任务来完成。这意味着创建的项目可以在 IDE 外部运行,而不存在任何锁定。Ant 任务的源文件(Java Card RI 的一部分)以及现成的 NetBeans 样例项目可以从 link:http://kenai.com/projects/javacard[+Java Card 项目门户+]下载。 |
| |
| 您是创建 Java Card 部署工具的卡供应商吗?请联系插件的创建者 link:mailto:tboudreau@sun.com[+Tim Boudreau+],以获取有关link:http://wiki.netbeans.org/JavaCardPlatformIntegration[+如何集成卡+]的详细信息!根据您要在 IDE 内为卡提供多少支持,可以在多个级别进行集成。 |
| |
| link:/about/contact_form.html?to=6&subject=NetBeans%20Java%20Card%20Development%20Quick%20Start%20Guide[+发送有关此教程的反馈意见+] |
| |
| |
| |
| == 相关链接 |
| |
| * 这些模块大多归功于 link:http://blogs.oracle.com/javacard/[+Anki Nelaturu+] 以及 Java Card 团队的其余成员。 |
| * link:http://java.sun.com/javacard[+Sun 的官方 Java Card 门户+] - 新闻、开发工具包、参考资料、规范、常见问题解答。 |
| * link:http://kenai.com/projects/javacard/pages/Home[+Java Card 项目门户+] - 源文件、样例项目、论坛、文档。 |
| * link:http://wiki.netbeans.org/JavaCardPlatformIntegration[+卡供应商的平台集成+] |
| * link:http://java.sun.com/developer/technicalArticles/javacard/javacard-servlets/[+在智能卡上部署 Servlet:具有 Java Card 3.0 的可移植 Web 服务器+] |