Java四大美女

古代有四大美人,各位热爱Java的大侠,可知Java也有四大美女?


如果被我问得一头雾水,那你就是有点out了。Java从开天辟地,进化到今天,可谓历尽苍桑,但是还是免费的。那为什么甲骨文还要花重金购买呢?原因很简单,甲骨文已经发现了Java的价值千金所在了。千金者,美女也。


Java发展至今天,也有点历史了,却很少有人为其四大美女著书立说,鄙人不才,看不过眼,就硬着头皮献美了,四大美女出场:


小可爱Applet;


后台老板Servlet;


掌门人Portlet;


小家碧玉MIDlet。


做为美女,难免骚首弄姿,所以她们的出场可能有不同的姿态,暂安排如下 :



  1. 害羞的小可爱——Applet刷卡器

  2. 无限风情的小甜甜——Applet聊天室

  3. 通情达理的接线生——Applet软电话

  4. 后台老板——无所不能的Servlet

  5. 惊现掌门人——Portlet闪亮登场

  6. 小家碧玉——智能设备MIDlet


各位香味相投的朋友,是不是心痒痒,想尽快一睹美女的芳容了?好吧,让小可爱先给大家亮一个pose。


一、害羞的小可爱——Applet刷卡器


用IC卡在刷卡器一放,"嘟"的一响,就刷了卡了。那么刷卡的程序是怎么设计的,下面我们用一个在WEB上的刷卡器作一介绍,Applet程序:


 



 
  
package dcrf;



// import java.awt.*;

import java.applet. * ;

import java.net.URL;

import java.net.MalformedURLException;







public class ReadCard extends Applet implements Runnable{

private boolean isStandalone = false ;

private String urlroot = null ;

private String urlfor = null ;

private Thread readCard;

private String forward = null ;



public String getParameter(String key, String def) {

return isStandalone ? System.getProperty(key, def) :

(getParameter(key)
!= null ? getParameter(key) : def);

}



public void init() {

this .urlroot = getDocumentBase().toString().substring( 0 ,getDocumentBase().toString().lastIndexOf( " / " ) + 1 );

this .urlfor = getDocumentBase().toString().substring(getDocumentBase().toString().lastIndexOf( " / " ));

this .forward = getParameter( " forward " );

}



public void start() {

readCard
= new Thread( this );

readCard.start();

}



public void stop() {

log(
"" );

readCard
= null ;

}



public void run() {

Thread me
= Thread.currentThread();

while (readCard == me) {

try {

ReadCardBean rc
= new ReadCardBean();

CardActionForm card
= new CardActionForm();

card
= rc.getFromCard();

if (card.getDevice() <= 0 ){

log(
" 读卡器初始化失败! " );

}
else if (card.getStatus() == 1 ){

log(
" 请使用正确IC卡! " );

}
else if (card.getStatus() == 2 ){

log(
" 装入密码失败! " );

}
else if (card.getStatus() == 3 ){

log(
" 校验密码失败! " );

}
else if (card.getStatus() == 4 ){

log(
" 读卡失败! " );

}
else if (card.getStatus() == 5 ){

log(
" 读卡器退出失败! " );

}
else if (card.getStatus() == 6 ){

log(
" 蜂鸣失败! " );

}
else {

log(
"" );

card.setRand(java.lang.Math.random());

sendToClient(card);

}

Thread.currentThread().sleep(
700 );

}

catch (InterruptedException e) {

log(
" Run Error: " + e.toString());

}

catch (Exception et) {

log(
" RunOther Error: " + et.toString());

}

}



}



public void sendToClient(CardActionForm card){

try {

if (forward != null && " accept " .equals(forward))

urlfor
= " dealAcceptAction.do?method=acceptCard " ;

else if (forward != null && " flower " .equals(forward))

urlfor
= " dealAction.do?method=acceptCard " ;

else if (forward != null && " test " .equals(forward))

urlfor
= " readCardAction.do?method=startRead " ;



String prBuffer
= "" ;

if (card.getPrBuffer() != null )

prBuffer
= new String(card.getPrBuffer());



URL newurl
= new URL(urlroot + urlfor + " &prBuffer= " + prBuffer + " &j " + card.getRand() + " = " );

getAppletContext().showDocument(newurl,
" _self " );

}
catch (MalformedURLException g){

log(
" Send Error: " + g.toString());

}

}



public void log(String str){

getAppletContext().showStatus(str);

}



}


 


 


这个Applet运用了一个线程,等待刷卡操作,一旦刷卡成功,发出蜂鸣声并转到其它应用界面,否则在浏览器的状态栏中打出错误信息。Applet还调用了一个读卡程序和一个数据结构。


 



 
  


package dcrf;



class ReadCardBean

{

public void ReadCardBean(){



}



public CardActionForm getFromCard()

{

short status;

int lDevice = 0 ;

int [] pSnr = new int [ 1 ];

char [] pSBuffer = new char [ 16 ];

char [] pRBuffer = new char [ 16 ];

JavaRD800 rd
= new JavaRD800();

CardActionForm form
= new CardActionForm();

form.setStatus((
short ) 0 );

form.setDevice(
1 );

// 初始化读卡器

lDevice
= rd.dc_init( 100 , 115200 );



if (lDevice <= 0 )

{

form.setDevice(lDevice);

return form;

}

// 检查卡类型

status
= rd.dc_card(lDevice,( short ) 0 ,pSnr);

if (status != 0 )

{

form.setStatus((
short ) 1 );

rd.dc_exit(lDevice);

return form;

}

form.setPsnr(pSnr);

// 发出蜂鸣声

status
= rd.dc_beep(lDevice,( short ) 10 );

if (status != 0 )

{

form.setStatus((
short ) 6 );

rd.dc_exit(lDevice);

return form;

}

// 装入密码

pSBuffer[
0 ] = 0xCC ;

...

pSBuffer[
6 ] = 0x00 ;



status
= rd.dc_load_key(lDevice,( short ) 0 ,( short ) 1 ,pSBuffer);

if (status != 0 )

{

form.setStatus((
short ) 2 );

rd.dc_exit(lDevice);

return form;

}

form.setPsBuffer(pSBuffer);

// 验证密码

status
= rd.dc_authentication(lDevice,( short ) 0 ,( short ) 1 );

if (status != 0 )

{

form.setStatus((
short ) 3 );

rd.dc_exit(lDevice);

return form;

}

// 读出编码

status
= rd.dc_read(lDevice,( short ) 4 ,pRBuffer);

if (status != 0 )

{

form.setStatus((
short ) 4 );

rd.dc_exit(lDevice);

return form;

}

form.setPrBuffer(pRBuffer);

// 退出

status
= rd.dc_exit(lDevice);

if (status != 0 )

{

form.setStatus((
short ) 5 );

rd.dc_exit(lDevice);

return form;

}

return form;

}

}



 


 


 



 
  


package dcrf;



public class CardActionForm implements java.io.Serializable{



private short status;

private int device;

private int [] psnr;

private char [] psBuffer;

private char [] prBuffer;

private String owner_code;

private double rand;



public short getStatus() { return status; }

public void setStatus( short status) { this .status = status; }



public int getDevice() { return device; }

public void setDevice( int device) { this .device = device; }



public int [] getPsnr() { return psnr; }

public void setPsnr( int [] psnr) { this .psnr = psnr; }



public char [] getPsBuffer() { return psBuffer; }

public void setPsBuffer( char [] psBuffer) { this .psBuffer = psBuffer; }



public char [] getPrBuffer() { return prBuffer; }

public void setPrBuffer( char [] prBuffer) { this .prBuffer = prBuffer; }



public String getOwner_code() { return owner_code; }

public void setOwner_code(String owner_code) { this .owner_code = owner_code; }



public double getRand() { return rand; }

public void setRand( double rand) { this .rand = rand; }





}


 


 


读卡程序还调用了IC卡的Api:


 



 
  


package dcrf;



public class JavaRD800

{

public JavaRD800()

{

}

static

{

System.loadLibrary(
" javaRD800 " );

}

public native int dc_init( int lPort, int lBaud);

public native short dc_exit( int lDevice);

public native short dc_card( int lDevice, short iMode, int [] pSnr);

public native short dc_authentication( int lDevice, short iMode, short iSecNr);

public native short dc_halt( int lDevice);

public native short dc_read( int lDevice, short iAdr, char [] pData);

public native short dc_write( int lDevice, short iAdr, char [] pData);

public native short dc_increment( int lDevice, short iAdr, int lValue);

public native short dc_decrement( int lDevice, short iAdr, int lValue);

public native short dc_initval( int lDevice, short iAdr, int lValue);

public native short dc_readval( int lDevice, short iAdr, int [] pValue);

public native short dc_transfer( int lDevice, short iAdr);

public native short dc_restore( int lDevice, short iAdr);

public native short dc_load_key( int lDevice, short iMode, short iSecNr, char [] pKey);

public native short dc_beep( int lDevice, short iMsec);

public native short dc_high_disp( int lDevice, short iOffset, short iDispLen, char [] pDispStr);

public native short dc_request( int lDevice, short iMode, int [] pTagType);

public native short dc_anticoll( int lDevice, short iBcnt, int [] pSnr);

public native short dc_select( int lDevice, int lSnr, short [] pSize);

public native short dc_gettime( int lDevice, char [] pTimeStr);

public native short dc_gettimehex( int lDevice, char [] pTimeStr);

public native short dc_settime( int lDevice, char [] pTimeStr);

public native short dc_settimehex( int lDevice, char [] pTimeStr);

public native short dc_setbright( int lDevice, short iBright);

public native short dc_ctl_mode( int lDevice, short iMode);

public native short dc_disp_mode( int lDevice, short iMode);

public native short dc_cpureset( int lDevice, short [] pLen, char [] pData);

public native short dc_cpuapdu( int lDevice, short iLen, char [] pSData, short [] pLen, char [] pRData);

public native short dc_cpuapdusource( int lDevice, short iLen, char [] pSData, short [] pLen, char [] pRData);

public native short dc_cpudown( int lDevice);

public native short dc_swr_eeprom( int lDevice, int lOffset, int lLen, char [] pBuffer);

public native short dc_srd_eeprom( int lDevice, int lOffset, int lLen, char [] pBuffer);

public native short dc_disp_str( int lDevice, char [] pDispStr);

}



 


 


把上面程序编译打包为:card.jar,然后在页面上调用:


 



 
  
<</span>script language="JavaScript" type="text/JavaScript">



<</span>/script>



 


 


从这个调用上我们可以看到,这个Applet没有显示在页面上,因为它的长和宽都设为:"0"了,width="0" height="0"。


这个小可爱可不是一般的"犹抱琵琶半遮面"的害羞,简直是只闻其声,不见其影。看来今天美女芳容还是难得一见,哈哈...


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值