blob: e2e3da5a834899762d2544000aab82837d4f0f71 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Java Card 开发快速入门指南 - NetBeans IDE 教程</title>
<link type="text/css" rel="stylesheet" media="all" href="../../../netbeans.css">
<meta name="author" content="Tim Boudreau">
<meta name="description" content="Getting started with Java development on Smart Cards with the NetBeans Java Card plugin">
<meta name="keywords" content="Java Card, smart card, Java, emulator, platform, netbeans plugin">
</head>
<body>
<h1>Java Card 开发快速入门指南</h1>
<p><img alt="支持 Java 的智能卡" src="../../../images_www/articles/74/javacard/java-smart-card-sm.jpg" style="float:right"></p>
<p><em>编写人:Tim Boudreau,维护人:Ruth Kusterer</em></p>
<p>
Java Card 是一个使用起来非常有趣的平台 - 在<a href="http://en.wikipedia.org/wiki/Smart_card">智能卡</a>上运行的 JVM 以及手掌大小的微型设备,无不令开发过程充满乐趣。Java Card 自版本 3.0 起分为两种类型:
</p>
<dl>
<dt><strong>传统</strong></dt>
<dd>
这种类型与 Java Card 的早期版本一样。平台功能极其受限。例如,不存在 <tt>java.lang.String</tt>,也没有 <tt>java.lang.Object.hashCode()</tt> 方法和浮点数。
</dd>
<dt><strong>扩展</strong></dt>
<dd>
适用于更新、更强大的智能卡 - 这是 Java Card 3.0 中的新增功能。它支持 Java 平台更为全面的实现。最酷的恐怕就是它在本机支持 Servlet 的功能了 - 实际上,您使用熟悉的 API 就能编写在智能卡上运行的 Web 应用程序!
</dd>
</dl>
<h3>目录</h3>
<ul>
<li><a href="#reqs" title="所需软件和硬件">所需软件和硬件</a></li>
<li><a href="#setup" title="设置项目环境">设置项目环境</a></li>
<li><a href="#types" title="了解 Java Card 项目类型">了解 Java Card 项目类型</a></li>
<li><a href="#projects" title="使用项目">使用项目</a></li>
<li><a href="#special" title="使用特殊的插件功能">使用特殊的插件功能</a></li>
<li><a href="#sdk" title="集成第三方 SDK">集成第三方 SDK</a></li>
<li><a href="#related" title="相关链接">相关链接</a></li>
</ul>
<h2><a name="reqs"></a>要求</h2>
<p><b>要学完本教程,您需要具备以下软件和资源:</b></p>
<img alt="此页上的内容适用于 NetBeans IDE 6.8 和 6.9" class="stamp" height="114" src="../../../images_www/articles/69/netbeans-stamp.gif" title="此页上的内容适用于 NetBeans IDE 6.8 和 6.9" width="114">
<table>
<tbody>
<tr>
<th class="tblheader" scope="col">软件或资源</th>
<th class="tblheader" scope="col">要求的版本</th>
</tr>
<tr>
<td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">NetBeans IDE</a></td>
<td class="tbltd1">6.9</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://java.sun.com/javacard/downloads/index.jsp">Java Card SDK</a></td>
<td class="tbltd1">3.02 </td>
</tr>
<tr>
<td class="tbltd1">适用于 NetBeans 的 Java Card 插件</a></td>
<td class="tbltd1">1.3 </td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java 开发工具包</a> (JDK)</td>
<td class="tbltd1">版本 6 </td>
</tr>
</tbody>
</table>
<h2><a name="setup"></a>设置项目环境</h2>
<p>由于智能卡没有用户界面,因此您需要一个用于在卡上读写数据的智能卡读卡器,或者使用 Java Card 引用实现 (RI) 中包含的仿真器。本教程将使用仿真器。 </p>
<p><b class="notes">注:</b>Java Card 插件适用于任何操作系统,但 Java Card 引用实现仿真器只可用于 Windows。不过,您也可以在其他操作系统上将其设置为 Java 平台,方法是将 NetBeans 指向 RI 在 Mac 或 Linux 系统上的 Windows 分区中的安装,但您不能使用此设置运行项目。 </p>
<h3>在 NetBeans IDE 中安装插件</h3>
<ol>
<li>下载并安装 NetBeans IDE 6.9。</li>
<li>安装完成后,转至 "Tools"(工具)> "Plugins"(插件)菜单。</li>
<li>在 "Available Plugins"(可用插件)下,有两个与 Java Card 相关的插件:Java Card 和 Java Card 运行时包。
<ul>
<li>Java Card 插件用于在 NetBeans IDE 中添加 Java Card 项目支持。</li>
<li>仅当您尚未安装 Java Card 引用实现的副本时,才需要 Java Card 3.0.2 运行时包。
</li>
</ul>
<p><img alt="安装适用于 NetBeans 的 Java Card 插件" src="../../../images_www/articles/74/javacard/install-javacard-plugins.png"></p>
</li>
<li>安装插件后,需要重新启动 IDE 才能继续执行下面的教程步骤。</li>
</ol>
<h3>注册 Java Card 平台</h3>
<p>如果从插件管理器下载了 Java Card 3.0.2 运行时包,则已将 Java Card SDK 设置为平台。但是,如果从 <a href="http://java.sun.com/javacard/devkit/">java.sun.com</a> 下载并安装了平台,则可以使用 "Tools"(工具)> "Java Platforms"(Java 平台)菜单将 Java Card 平台添加到 IDE 中,具体的操作方法与注册任何 Java 平台相同。</p>
<p><img alt="安装 Java Card 平台" src="../../../images_www/articles/74/javacard/installPlatform.png"></p>
<p>设置 Java Card 平台后,IDE 的 "Services"(服务)标签中会列出该平台。如果未显示 "Services"(服务)标签,请从菜单中选择 "Windows"(窗口)> "Services"(服务)。 </p>
<p><img alt="已安装的 Java Card 平台和设备" src="../../../images_www/articles/74/javacard/services-tab.png"></p>
<p> 一个“平台”可以有多台“设备”。您可以将项目部署到特定平台的特定设备上。 </p>
<h2><a name="types"></a>了解 Java Card 项目类型</h2>
<p>
从菜单中选择 "File"(文件)> "New Project"(新建项目),然后单击 "Java Card" 类别。此处有多种 Java Card 项目可供您创建。所有这些项目与 NetBeans Java SE 项目一样,都使用 <a href="http://ant.apache.org/">Apache Ant</a> 构建。
</p>
<p><img alt="NetBeans 中的 Java Card 项目类型" src="../../../images_www/articles/74/javacard/choose-project-type.png"> </p>
<p>
传统的小应用程序项目为较小的设备创建传统的 Java Card 小应用程序,这与 Java Card 2.0 和更早版本中使用的小应用程序类似。传统的库项目类似于传统的小应用程序项目,它没有小应用程序,是您希望存放在设备上且可在小应用程序之间共享的一些代码。
</p>
<p>
扩展的小应用程序和库项目使用 Java Card 3.0 中的扩展 API,以便您能够使用 java.lang.String 等。传统项目和扩展项目的引导类路径有所不同,例如,传统项目的代码完成不显示 java.lang.String,但扩展项目的代码完成却显示 java.lang.String。
</p>
<p><img alt="创建 Java Card 小应用程序项目" src="../../../images_www/articles/74/javacard/create-applet-app.png" width="600"> </p>
<p>
Web 应用程序项目或许是 Java Card 3.0 最酷的功能。您可以获得实现 Servlet 的框架项目,并且可以访问完整 Servlet API。这比使用任一类型的小应用程序式应用程序要简单得多 - 您在客户端上无需任何特殊代码,即可与设备上运行的应用程序进行交互,此操作只需一个 Web 浏览器而已!您可以使用引用实现和桌面 Web 浏览器在本地测试应用程序。
</p>
<p><img alt="创建 Java Card Web 应用程序项目" src="../../../images_www/articles/74/javacard/create-web-app.png" width="600"> </p>
<h2><a name="projects"></a>使用项目</h2>
<p>对于本教程,我们将创建一个新的 Web 项目。</p>
<p> 在新的 Web 项目中,输入 "Card Web Application" 作为项目名称,并将项目位置设置为 NetBeansProjects 目录。单击 "Finish"(完成)后,该项目出现在 "Project"(项目)标签中。
</p>
<p>
右键单击 "Project"(项目)标签中的项目节点,然后从上下文菜单中选择 "Properties"(属性)。在 "Project Properties"(项目属性)窗口的 "Run"(运行)部分中,您可以更改项目所部署到的平台和设备。单击 "Close"(关闭)以保存更改。
</p>
<p>
Java Card Web 应用程序的使用与部署到 Servlet 容器的任何其他 Web 应用程序类似。按工具栏上的 "Run"(运行)按钮,以运行 "Hello World" 样例。运行 Java Card Web 应用程序时,将打开一个 Web 浏览器窗口,其中显示 Servlet 的输出:<tt>Hello from webapplication1.MyServlet</tt>
</p>
<p><img alt="Java Card Web 应用程序项目中的代码编辑" src="../../../images_www/articles/74/javacard/editor.png" width="600"> </p>
<p>
运行小应用程序类型的项目时,NetBeans IDE 将提供两个有用的界面:命令行输出和 Java Card 控制台。使用此控制台可与小应用程序进行交互:您可以发送十六进制数据并读取回复。
</p>
<p>
提示:RI 包含可在 NetBeans IDE 中打开和运行的更多样例项目。
</p>
<p><img alt="Java Card 项目运行属性" src="../../../images_www/articles/74/javacard/run-customizer.png" width="600"> </p>
<h2><a name="special"></a>使用特殊的插件功能</h2>
<p>
Java Card 有两个令人不可思议的特性,这在其他 Java 平台中都不曾遇到过:
</p>
<dl>
<dt><strong>应用程序标识符 (AID)</strong></dt>
<dd>这些唯一标识符类似于 //aid//720A75E082/0058AEFC20。十六进制数值的第一部分是供应商 ID(需从<a href="http://iso.org/">国际标准化组织 (ISO)</a> 获得);第二部分是您想出来的一个唯一值。AID 用来标识小应用程序类、Java 包(仅传统的小应用程序和库项目)以及小应用程序的唯一实例(您可以在一个设备上多次部署相同的小应用程序,使用实例 AID 可以选择要将信息发送给哪个小应用程序)。
</dd>
<dt><strong>APDU 脚本</strong></dt>
<dd>这些脚本用于向小应用程序发送数据。它包含过多需手动键入的十六进制数值;该脚本需要选择一个特定的小应用程序实例,然后向该实例发送数据。您也可以使用 Java Card 控制台,而不是发送预先编写的脚本。
</dd>
</dl>
<p>
这两项特性都有些复杂,不过,NetBeans 插件可以最大限度地简化其操作,如下所示:
</p>
<ul>
<li>
<p>
当创建项目时,将会自动为小应用程序 AID、传统的包 AID 和实例 AID 生成合理的值。
</p>
</li><li>
<p>
在 "Project Properties"(项目属性)对话框中选择 "Applets"(小应用程序)标签后,项目将扫描其类路径,以查找所有 Java Card 小应用程序子类:
</p>
<p><img alt="在 Java Card 项目中查找小应用程序子类" src="../../../images_www/articles/74/javacard/customize-applets-pre.png" width="600"></p>
</li><li>
<p>
找到子类后,便可以在该对话框中选择实际部署的小应用程序,并定制所用的 AID 值、部署参数等。IDE 会验证您输入的所有数据,以便确保不存在任何无效数据:
</p>
<p><img alt="在 Java Card 项目中定制小应用程序部署" src="../../../images_www/articles/74/javacard/customize-applets.png" width="600"> </p>
</li><li>
<p>
如果要部署同一小应用程序的两个实例,则可以进行此设置;但是,对于仅需部署一个小应用程序实例的简单情况,则不需要考虑此设置:
</p>
<p><img alt="为 NetBeans Java Card 项目定制已部署的小应用程序实例" src="../../../images_www/articles/74/javacard/customize-instances.png" width="600"></p>
</li><li>
<p>
要测试处于运行状态的小应用程序,您无需手动编写整个 APDU 脚本,使用内置控制台即可直接与部署的小应用程序进行交互:
</p>
<p><img alt="打开 APDU 控制台" src="../../../images_www/articles/74/javacard/open-console.png"></p>
<p> <img alt="APDU 控制台" src="../../../images_www/articles/74/javacard/shell.png"> </p>
</li><li>
<p>
传统项目(这些项目只允许包含一个 Java 包)的“包 AID”也由 IDE 生成,不过可以定制。
</p>
<p><img alt="定制传统包 AID" src="../../../images_www/articles/74/javacard/create-project-package-aid.png" width="600"> </p>
</li><li>
<p>
项目中的所有 AID 值有一部分将是 ISO 指定的供应商 ID(称为 RID)。为快速着手操作,IDE 会生成一个随机 RID 值,以便进行开发和测试。如果您有正式的 RID,则可以在 "Tools"(工具)> "Options"(选项)中输入该 RID,以便将其用于所有的新项目。单击 "Project Properties"(项目属性)中的 "Generate"(生成)按钮,可以更新现有项目中的值。
</p>
<p><img alt="设置供 Java Card 项目的所有 AID 使用的全局 RID" src="../../../images_www/articles/74/javacard/global-rid.png" width="600"></p>
</li>
</ul>
<h2><a name="sdk"></a>集成第三方 SDK</h2>
<p>
目前,工具仅支持 Java Card 3.0.2 引用实现,但是,这些工具有一个可扩展的 API,可用于集成供应商卡。平台和设备定义仅仅是由构建脚本导入的属性文件。
</p>
<p>
部署将通过由卡供应商提供的一组 Ant 任务来完成。这意味着创建的项目可以在 IDE 外部运行,而不存在任何锁定。Ant 任务的源文件(Java Card RI 的一部分)以及现成的 NetBeans 样例项目可以从 <a href="http://kenai.com/projects/javacard">Java Card 项目门户</a>下载。
</p>
<p>
您是创建 Java Card 部署工具的卡供应商吗?请联系插件的创建者 <a href="mailto:tboudreau@sun.com">Tim Boudreau</a>,以获取有关<a href="http://wiki.netbeans.org/JavaCardPlatformIntegration">如何集成卡</a>的详细信息!根据您要在 IDE 内为卡提供多少支持,可以在多个级别进行集成。
</p>
<div class="feedback-box"><a href="/about/contact_form.html?to=6&subject=NetBeans%20Java%20Card%20Development%20Quick%20Start%20Guide">发送有关此教程的反馈意见</a></div>
<br style="clear:both;" />
<h2><a name="related"></a>相关链接</h2>
<ul>
<li> 这些模块大多归功于 <a href="https://blogs.oracle.com/javacard/">Anki Nelaturu</a> 以及 Java Card 团队的其余成员。 </li>
<li><a href="http://java.sun.com/javacard">Sun 的官方 Java Card 门户</a> - 新闻、开发工具包、参考资料、规范、常见问题解答。 </li>
<li><a href="http://kenai.com/projects/javacard/pages/Home">Java Card 项目门户</a> - 源文件、样例项目、论坛、文档。 </li>
<li> <a href="http://wiki.netbeans.org/JavaCardPlatformIntegration">卡供应商的平台集成</a></li>
<li> <a href="http://java.sun.com/developer/technicalArticles/javacard/javacard-servlets/">在智能卡上部署 Servlet:具有 Java Card 3.0 的可移植 Web 服务器</a></li>
</ul>
</body>
</html>