J2EE概述
当前位置:以往代写 > JAVA 教程 >J2EE概述
2019-06-14

J2EE概述

J2EE概述

副标题#e#

一、媒介

Java的技能,因为 computing resource的差异,而区分为差异性质的Java平台,如 Enterprise Java、 Embedded Java与 Java Card等。若是以Embedded Java来说,因为成果上的要求有限,而且受限於硬体资源巨细(如呼唤器),所以在硬体与Java执行情况上必需有所妥协。Java Card也是基於硬体与应用的 求所开拓的技能,目标是使得 Java的技能可以或许在如同smart card晶片般巨细的有限资源下执行。所以,今朝Java Card可以说是最小的Java平台。

二、简介

Java Card是Java 平台中最小的 subset,其设定的执行情况为smart card上的晶片或是有严格硬体限制的情况。Java Card的问世,一方面是为了推展Java的应用条理,一方面也是为了将Java平台的特性以及Java Card 的长处带到smart card上,这些长处主要有: Platform-Indep endent:使得 Java Card applets (在Java Card上执行的程式)可以或许在差异卡片的JCAE( Java Card Application Environment)上执行,即透过Java VM 的机制来到达跨平台的本领。 Multi-Applicat ion Capable:在同一个Java Card 中可以或许存放多个 Java Card applets ,而且也可以或许透过 download的方法来下载须要的applets 而到达一卡多用途的长处,使得卡的利用可以或许更有弹性。 Compatible with Existing Smart Card Standards: Java Card能与国№ 尺度ISO 7816( Smart Card尺度)以及家产界尺度如 Europay/Master Card/Visa (EMV)相容。

所以,在将来Java Card不单可以或许代替今天Smart Card的成果,更可以或许成长出多样化的应用,如身份识别、医疗资讯记录、电子钱包、门禁管控等,甚至能将很多差异的应用程式荟萃於一张卡上,使得这些随身的软体可以或许更小更实用。

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

三、运作逻辑

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

J2EE概述

图1、 JavaCard运作模式图

第一个部门就是 Java Card这一端,共同CAD(Card Acceptance Device ),也就是图1中的Card Reader来传输、读取Card中的资料,而且供应 Card所 的电源。而JavaCard自己则可以执行applet程式,使得一些敏感的资料与行为可以或许安详执行而不受外部程式影响。第二部门则是图1右方的 Terminal端,认真提供处事程式及操纵介面,并透过CAD 与JavaCard相同。

别的,在图1中所暗示的 APDU(Application Protocol Data Units)即双箭头的部门,则是 terminal与Java Card相同的名目与协定。由terminal 端传送给Java Card 的APDU称为Command APDU,主要合用来下达指令以及传输资料给Java Card。图2即Command APDU的名目。

J2EE概述

图2、 Command APDU名目


#p#副标题#e#

其栏位所暗示的意义别离为:

CLA – Class Byte,用於识别applet INS – Instruction Byte ,下达给applet之指令 P1 – 第一个指令参数 P2 – 第二个指令参数 Lc – Data Field之长度 Data Field – 资料栏位 Le – 回传资料之长度

譬喻,terminal要下达两个byte相加的加法指令(INS= 0x01)给applet( CLA=0x80)时, Command APDU的写法大概为:

J2EE概述

而当Java Card applet吸收到此一指令时则会先判定 CLA byte是否为 0x80,接著再按照 terminal端所下达的指令来执行,并将Data Field依指令性质取出两个独立的byte来相加。

而由Java Card端回传给terminal端的 APDU则称为 Response APDU,图3则为此APDU之名目。

J2EE概述

图4

其栏位所暗示的意义别离为:

Data Field – return之资料栏位 SW1 – 执行状态参数1 SW2 – 执行状态参数2

所以,操作上述的加法为例,Java Card applet执行後所return的值若为 short value(16-bit integer),则 Response APDU的暗示法大概为:

J2EE概述

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

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

#p#副标题#e#

四、Java Card硬体需求

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

#p#分页标题#e#

512 bytes RAM:主要用於存放程式执行时的 stack、暂存资料以及做为I/O的缓冲区。 24 KB ROM :主要用於存放系统的程式以及 Runtime Environment,如 JVM、applets、 native functions 等。 8 KB EEPROM:用於储存我们所下载至 Java Card的 applets,而且做为 object heap存放之处。 8-bit processor: Java Card必需至少支援8位元的处理惩罚器。   五、Java Card软体架构

在上述的硬体架构中,根基上我们可以将Java Card想像为一部PC的缩影,而Java Card的软体架构则具有OS、 native functions 、JCRE(Java Card Runtime Environment)以及架构在此JCRE上的应用程式(Java Card applets),事实上Java Card的软体架构也是与今天的软体架构相仿,图5即为Java Card之软体架构。

J2EE概述

图5 Java Card之软体架构图

在此软体架构中,最底层的OS and Native Functions 是认真低阶的处理惩罚事情,如同今天的功课系统。而在上面两层Java Card Interpreter与Java Card APIs and Framework就是我们所谓的JCRE,主要认真执行Java Card applets以及提供 applet执行所 要的情况。而 Industry Add-on Classes则是 service provider 所提供的classes,使得企业与公司可以或许提供属於本身的处事程式。

Java Card的最上层就是所谓的Java Card applets,就如图5-1所示,一个 Java Card可以执行多个Java Card applets,可是要出格留意,Java Card 的执行情况并无支援Multi-thread,所以一次只能执行一个applet,而且 applet与applet之间也有firewall的阻隔。尽量如此,在Java Card的设计之中亦有让差异的 applets彼此相同的机制,我们只 要让applet implement javacard.framewor k.Shareable interface就可以或许分享applet 的 resource。

因为受限於体积与 resource,所以 Java Card在执行情况上的支援是相当有限的,表即 Java Card执行情况的支援现况,其他具体内容请参考 references。

表 Java Card执行情况之支援

支援 不支援
boolean、byte、 short、int float、double、 long、char、 Strings
Dynamic Object Creation Dynamic Class Loading
Arrays Security Manager
Virtual mehtods Garbage Collectioin & Finalization
Dynamic allocation Threads
Packages Cloning
Exceptions Multi-dimentional arrays
Interfaces  

六、Java Ring

Java Ring又名 Java-Powered iButton,是Dallas Semiconductor公司的产物,事实上 Java Ring只是Java Card的别的一种型态,Dallas公司将它建造成为钮扣的形状,进而镶嵌在戒指之上,成为一个Java Ring。

因为Java Ring是沿袭Java Card的规格,所以在软体的架构上是沟通的。而 Java Ring在Java Card的原有的硬体架构下增强了其原有的布局,而且成长出与Java Card差异的应用层面。

#p#副标题#e#

七、Java Card API

Java Card的2.1版总共分为四个 packages,而其内容与重要的物件分述如下:

javacard.lang package:提供 Java language重要的classes,如 Object物件,因为所有的Java物件皆担任其下。 Object class – root of class hierarchy Throwable class – 为所有 error及exception 的superclass,这亦暗示Java Card支援exception javacard.frame work package :是Java Card API 主要的core package,提供了实做Java Card applet根基的物件与东西。 IOS7816 abstract interface – 提供了ISO7816所利用的常数值 PIN abstract interface – 使其 subclass能透过此一介面可以或许做check PIN number及验证 PIN是否为validate 等成果 Shareable abstract interface – 使得差异的applets可以或许透过implement此介面来到达相互相同的成果 AID class – AID(Application Identifier)是用来独一暗示Java Card applet的number,使得JCRE可以或许透过一个AID table来识别或选择我们所要执行的applet APDU class – 是属於 JCRE的物件,是藉由maintain一个 byte array buffer 来吸收与传送 terminal端的指令与回传applet执行的功效与状态的尺度名目 Applet class – 每一个 Java Card applet 都必需担任在此 class之下。个中在 implement时要出格留意几个methods,如select、 deselect是当 terminal端跟据 applet的AID下达 select或deselect 此applet的指令时,由JCRE来启动的 methods。而 install与register 则是applet下载至 Java Card安装并向 JCRE注册之methods 。比及applet安装注册完成,而且被 terminal所select 时,所有下达的 APDU command接会交由applet的 process method来处理惩罚并认真回传功效 JCSystem class – 认真打点 applet与Java Card 的系统资源,如AID 与Transaction的打点 OwnerPIN class – 担任自PIN interface,认真 maintain卡片持有人的PIN number,并提供相关check与 update等methods Util class – 是一个提供常用东西的class ,如byte array copy与compare等 javacard.secur ity package:提供安详机制与物件的package,个中几个重要的 interface与class 如下: Key abstract interface – 是 DESKey、 PrivateKey、 PublicKey等 interface的配合介面 KeyBuilde r class – 是一个 create各类安详的 key的factory MessageDi gest class – 是一个可以将message做数位签章之object javacardx.cryp to package:个中包括了关於加密与安详的物件,而且有美国的出口限制,而此package 仅包括了一个 interface与一个 abstract class: Cipher abstract class – 使得在Java Card中的资讯得以加密掩护   八、典型

#p#分页标题#e#

程式、HelloWorld applet//一applet必需要属於一package
package samples.HelloWorld;
import javacard.framework.*; //imoprt须要的package
public class HelloWorld extends Applet
{ 
//此echoBytes array为"HelloWorld"的16进位暗示法
  private static final byte echoBytes[] = {
   0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x57, 0x6f, 0x72, 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 HelloWorld(null);
  }
  public void process(APDU apdu) throws ISOException
  { //处理惩罚terminal端的APDU指令
   byte buffer[] = apdu.getBuffer();
//取得APDU之buffer
//将echoBytes,及"HelloWorld"byte自串copy至APDU的buffer
  Util.arrayCopyNonAtomic(echoBytes, (short)0, buffer,
   (short)0, (short)echoBytes.length);
//将APDU buffer的资料设为"写出",并直接传送出去
apdu.setOutgoingAndSend((short)0, (short)echoBytes.length);
  }
}

以上是一个 HelloWorld的例子用来先容根基的Java Card applet的implement 方法。而此 HelloWorld典型程式的执行,是预设由terminal端传来 Command APDU後,此applet并不处理惩罚此APDU,而是直接将"HelloWorld"的讯息以APDU的方法直接回传给 terminal端。

    关键字:

在线提交作业