帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
J2EE概述
作者:佚名 发布时间:2005-04-02 来源:不详
 
  一、前言                                                                      
  Java的技术,因为 com
Enterprise Java、 Embedd
上的要求有限,并且受限於
所妥协。Java Card也是基
在如同smart card晶片般大
平台。
puting resource的不同,而区
ed Java与 Java Card等。若是
硬体资源大小(如呼叫器),所
於硬体与应用的 求所开发的技
小的有限资源下执行。所以,目

分为不同性质的Java平台,如
以Embedded Java来说,因为功能
以在硬体与Java执行环境上必须有
术,目的是使得 Java的技术能够
前Java Card可以说是最小的Java

  二、简介                                                                      
  Java Card是Java 平台
有严格硬体限制的环境。Ja
为了将Java平台的特性以及
中最小的 subset,其设定的执
va Card的问世,一方面是为了
Java Card 的好处带到smart ca
行环境为smart card上的晶片或是
推展Java的应用层次,一方面也是
rd上,这些好处主要有:
  Platform-Indep enden
在不同卡片的JCAE( Java
来达到跨平台的能力。
t:使得 Java Card applets (
Card Application Environment

在Java Card上执行的程式)能够
)上执行,即透过Java VM 的机制

  Multi-Applicat ion Capable:在同
applets ,并且也能够透过 download的
,使得卡的使用能够更有弹性。
一个Java Card 中能够存放多个 Java Card
方式来下载必要的applets 而达到一卡多用途的好处

  Compatible with Existing Smart C
( Smart Card标准)以及工业界标准如
ard Standards: Java Card能与国№ 标准ISO 7816
Europay/Master Card/Visa (EMV)相容。
  所以,在未来Java Car
用,如身份识别、医疗资讯
於一张卡上,使得这些随身
d不但能够取代今日Smart Card
记录、电子钱包、门禁管控等,
的软体能够更小更实用。
的功能,更能够发展出多样化的应
甚至能将许多不同的应用程式集合

  JavaCard现行的版本有2.0与2.1版,
年刚释出。
其中2.0版是在1997 年底所释出,而2.1 版则是在今

  三、运作逻辑                                                                 
  如图1所示Java Card实№运作的模式,主要分为二个部分。                
  

  图1、 JavaCard运作模式图                                         
  第一个部分就是 Java
中的Card Reader来传输、
则可以执行applet程式,使
部分则是图1右方的 Termin

Card这一端,配合CAD(Card Ac
读取Card中的资料,并且供给 C
得一些敏感的资料与行为能够安
al端,负责提供服务程式及操作

ceptance Device ),也就是图1
ard所 的电源。而JavaCard本身
全执行而不受外部程式影响。第二
介面,并透过CAD 与JavaCard沟通

  另外,在图1中所表示
是 terminal与Java Card沟
Command APDU,主要适用来

的 APDU(Application Protocol
通的格式与协定。由terminal
下达指令以及传输资料给Java C

Data Units)即双箭头的部分,则
端传送给Java Card 的APDU称为
ard。图2即Command APDU的格式。

  

  图2、 Command APDU格式                                       
  其栏位所表示的意义分别为:                                                   
  CLA - Class Byte,用於识别applet                       
  INS - Instruction Byte ,下达给applet之指令     
  P1 - 第一个指令参数                                                     
  P2 - 第二个指令参数                                                     
  Lc - Data Field之长度                                         
  Data Field - 资料栏位                                           
  Le - 回传资料之长度                                                     
    例如,terminal要
CLA=0x80)时, Command A
下达两个byte相加的加法指令(
PDU的写法可能为:
INS= 0x01)给applet(

  

  而当Java Card applet接收到此一指
terminal端所下达的指令来执行,并将D
令时则会先判断 CLA byte是否为 0x80,接著再根据
ata Field依指令性质取出两个独立的byte来相加。
  而由Java Card端回传给terminal端
式。
的 APDU则称为 Response APDU,图3则为此APDU之格

  

  图4                                                                       
  其栏位所表示的意义分别为:                                                   
  Data Field - return之资料栏位                             
  SW1 - 执行状态参数1                                                   
  SW2 - 执行状态参数2                                                   
  所以,利用上述的加法
value(16-bit integer),
为例,Java Card applet执行後
则 Response APDU的表示法可能
所return的值若为 short
为:
  

  其中Data Field为一sh
0x9000 )即"success"或是
ort integer(以两个bytes表示
"no error"的意思。
),而SW1与SW2所表示的意义(

  根据图1的运作模式,若以电子钱包
applet ,负责提款、付帐与维护帐目,
Terminal)的Card Reader中,透过提款
知Java Card 上的applet将这笔款项存入
就成为一个行动的卡片钱包。若我们 要
同的逻辑来扣除款项。所以,在诸如此类
来达到消费的目的。不同於一般信用卡的
手续与携带零钱的麻烦。
为例,我们一开始会在Java Card上 install一个
当我们 要提款时,必须Java Card放入提款机(
机的服务程式与介面来提出我们 要的款项,并且通
Java Card 的帐目中。如此我们所持有的Java Card
消费的话(如搭公车、网路购物等),就可以透过相
的消费行为里,我们就可以透过这种简单的读卡动作
是,我们不但能做小额的消费,也省去了付帐的繁杂

  四、Java Card硬体需求                                               
  Java Card有如一部具
environment的 求,其最
体而微的电脑,其硬体的规格主
小的规格要求为:
要是在於维护Java Card runtime

  512 bytes RAM:主要
用於存放程式执行时的 stack、
暂存资料以及做为I/O的缓冲区。
  24 KB ROM :主要用於存放系统的程
native functions 等。
式以及 Runtime Environment,如 JVM、applets、

  8 KB EEPROM:用於储
放之处。
存我们所下载至 Java Card的 a

pplets,并且做为 object heap存

  8-bit processor: Java Card必须
至少支援8位元的处理器。
  五、Java Card软体架构                                                
  在上述的硬体架构中,
的软体架构则具有OS、 nat
构在此JCRE上的应用程式(
软体架构相仿,图5即为Jav
基本上我们可以将Java Card想
ive functions 、JCRE(Java Ca
Java Card applets),事实上J
a Card之软体架构。
像为一部PC的缩影,而Java Card
rd Runtime Environment)以及架
ava Card的软体架构也是与今日的

  

  图5 Java Card之软体架构图                                       
  在此软体架构中,最底
的作业系统。而在上面两层
们所谓的JCRE,主要负责执
Industry Add-on Classes
提供属於自己的服务程式。
层的OS and Native Functions
Java Card Interpreter与Java
行Java Card applets以及提供
则是 service provider 所提供

是负责低阶的处理工作,如同今日
Card APIs and Framework就是我
applet执行所 要的环境。而
的classes,使得企业与公司能够

  Java Card的最上层就是所谓的Java
以执行多个Java Card applets,但是要
Multi-thread,所以一次只能执行一个ap
隔。尽管如此,在Java Card的设计之中
让applet implement javacard.framewor
resource。
Card applets,就如图5-1所示,一个 Java Card可
特别注意,Java Card 的执行环境并无支援
plet,并且 applet与applet之间也有firewall的阻
亦有让不同的 applets相互沟通的机制,我们只 要
k.Shareable interface就能够分享applet 的

  因为受限於体积与 res
Java Card执行环境的支援
ource,所以 Java Card在执行
现况,其他详细内容请参考 ref
环境上的支援是相当有限的,表即
erences。
  

  六、Java Ring                                                        
  Java Ring又名 Java-Powered iButt
Java Ring只是Java Card的另外一种型态
戒指之上,成为一个Java Ring。
on,是Dallas Semiconductor公司的产品,事实上
,Dallas公司将它制作成为钮扣的形状,进而镶嵌在

  因为Java Ring是沿袭Java Card的规
Java Card的原有的硬体架构下加强了其
面。
格,所以在软体的架构上是相同的。而 Java Ring在
原有的结构,并且发展出与Java Card不同的应用层

  七、Java Card API                                                
  Java Card的2.1版总共
分为四个 packages,而其内容
与重要的物件分述如下:
  javacard.lang packag
有的Java物件皆继承其下。
e:提供 Java language重要的c

lasses,如 Object物件,因为所

  Object class - root of class hierarchy
  Throwable class - 为所有 error及
exception
exception 的superclass,这亦表示Java Card支援

  javacard.frame work package :是
Java Card applet基本的物件与工具。
Java Card API 主要的core package,提供了实做

  IOS7816 abstract int
erface - 提供了ISO7816所使用
的常数值
  PIN abstract interfa
证 PIN是否为validate 等
ce - 使其 subclass能透过此一
功能
介面能够做check PIN number及验

  Shareable abstract i
互相沟通的功能
nterface - 使得不同的applets

能够透过implement此介面来达到

  AID class - AID(Appl
,使得JCRE能够透过一个AI
ication Identifier)是用来唯
D table来识别或选择我们所要
一表示Java Card applet的number
执行的applet
  APDU class - 是属於
传送 terminal端的指令与
JCRE的物件,是藉由maintain一
回传applet执行的结果与状态的
个 byte array buffer 来接收与
标准格式
  Applet class - 每一个 Java Card
implement时要特别注意几个methods,如
AID下达 select或deselect 此applet的
register 则是applet下载至 Java Card
册完成,并且被 terminal所select 时,
process method来处理并负责回传结果
applet 都必须继承在此 class之下。其中在
select、 deselect是当 terminal端跟据 applet的
指令时,由JCRE来启动的 methods。而 install与
安装并向 JCRE注册之methods 。等到applet安装注
所有下达的 APDU command接会交由applet的

  JCSystem class - 负
的管理
责管理 applet与Java Card 的

系统资源,如AID 与Transaction

  OwnerPIN class - 继
提供相关check与 update等
承自PIN interface,负责 main
methods
tain卡片持有人的PIN number,并

  Util class - 是一个提供常用工具
的class ,如byte array copy与compare等
  javacard.secur ity p
interface与class 如下:
ackage:提供安全机制与物件的

package,其中几个重要的

  Key abstract interface - 是 DESK
介面
ey、 PrivateKey、 PublicKey等 interface的共同

  KeyBuilde r class -
是一个 create各种安全的 key
的factory
  MessageDi gest class
- 是一个可以将message做数位
签章之object
  javacardx.cryp to package:其中
制,而此package 仅包含了一个 interfa
包含了关於加密与安全的物件,并且有美国的出口限
ce与一个 abstract class:
  Cipher abstract clas
s - 使得在Java Card中的资讯
得以加密保护
  八、范例                                                                     
  程式、HelloWorld applet                                     
  //一applet必须要属於一package                                  
  package samples.HelloWorld;                     
  import javacard.framework.*; //i
moprt必要的package
  public class HelloWorld extends Applet  
  {                                                                       
  //此echoBytes array为"HelloWorld"的16进位表示法
   private static final byte ec
hoBytes[] = {
   0x48, 0x65, 0x6
c, 0x6c, 0x6f, 0x57, 0x6f, 0
x72, 0x6c, 0x64};
  //applet constructor                                      
   protected HelloWorld(APDU apdu)        
   { //在applet initiate时向JCRE注册              
   register();                                        
   }                                                                    
  /*当applet下载至Java Card时,则
会启动install method来安装applet,并传入
  applet install所要的参数*/                                    
   public static void install(
byte[] bArray, short bOffset, byte bLength )
   { //initiate                                             
   HelloWorld applets new HelloWo
rld(null);
   }                                                                    
   public void process(APDU apd
u) throws ISOException
   { //处理terminal端的APDU指令                          
   byte buffer[] = apdu.getBuffer();
   //取得APDU之buffer                                              
   //将echoBytes,及"HelloWorld"by
te自串copy至APDU的buffer
   Util.arrayCopyNon
Atomic(echoBytes, (short)0,
buffer,

   (short)0, (shor
t)echoBytes.length);
  //将APDU buffer的资料设为"写出",并直接传送出去                
   apdu.setOutgoingAndSend((short)
0, (short)echoBytes.length);
   }                                                                    
  }                                                                            
  以上是一个 HelloWorld的例子用来
此 HelloWorld范例程式的执行,是预设
处理此APDU,而是直接将"HelloWorld"的
介绍基本的Java Card applet的implement 方式。而
由terminal端传来 Command APDU後,此applet并不
讯息以APDU的方式直接回传给 terminal端。


  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·J2EE开发n层应用  (2005-04-02)
 ·从商业角度分析J2EE与WINDOWS DN  (2005-04-02)
 ·XML和J2EE的完美结合  (2005-04-02)
 ·J2EE的安全认证机制  (2005-04-02)
 ·J2EE配置指南  (2005-04-02)
 ·J2EE中的设计模式  (2005-04-02)
 ·J2EE表现层设计思考  (2005-04-02)
 ·开发完整J2EE解决方案的八个步骤  (2005-04-02)
 ·J2EE平台架构上开发CRM的技术过程  (2005-04-02)
 ·使用J2EE建立基于XML的网络服务  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统