日期:2014-05-16  浏览次数:20389 次

javascript 与applet的通讯 和java与c(dll文件)通讯,最终在b/s架构下实现与硬件(读卡器)通讯

??? ?javascript 与applet的通讯 和java与c(dll文件)通讯,最终在b/s架构下实现与硬件(读卡器)通讯

?在b/s架构下怎样实现客户端的硬件(读卡器)设备通讯,得到硬件(读卡器)的数据。在此与硬件设备通讯的C或其它的通讯设备语言是由
?商提供的。我只负责实现javascript与applet通讯和jni与c通讯.在此我们要解决的问题是:
? 1)javascript和applet怎样通讯?
? 2)java怎样调用c来实现和硬件通讯?
? 3)由于applet的安全级别非常的高,那么怎样实现安全认证或数字签名?
? 4)由于在B/S架构下程序一般放在服务器端,那么怎样来实现对客户端的硬件(读卡器)操作呢?
  用一个实现实例来说明上述问题:
  1)写一个java程序利用jni来调用用c产生的dll(动态连接库)如下HelloWorld.java

java 代码
  1. public?class?HelloWorld?{ ??
  2. ?????public?native?void?displayHelloWorld();//注意关键字native,这就说明这个方法是用本地方法实现的。 ??
  3. ? public?native?String?getUserName();//从(本地文件)c?程序中返回一个值 ??
  4. ?????static?{//静态代码段里面导入了hello.dll。 ??
  5. ??????System.loadLibrary("hello");//加载一个动态连接(dll)文件,在调用时它用最早的调用到内存中 ??
  6. ??//System.load("D:\\Tomcat?5.0\\webapps\\test\\jar\\hello");//能过指定的绝对路径来加载 ??
  7. ?????} ??
  8. ????/**//* ?
  9. ??????*构造方法 ?
  10. ??????*/??
  11. ????public?HelloWorld(){ ??
  12. ????} ??
  13. ?????public?static?void?main(String[]?args)?{//调用本类的displayHelloWorld方法,(当然了方法实际上是用c语言实现的) ??
  14. ??//new?HelloWorld().displayHelloWorld(); ??
  15. ???String?s?=?new?HelloWorld().getUserName(); ??
  16. ???System.out.println("successful?"+s);? ??
  17. ???//System.out.println(s.length()); ??
  18. ?????} ??
  19. ?}???

?2)用javac编译HelloWorld
?3)用javah产生HelloWorld.h文件。它好比java中的一个接口。

c 代码
  1. /**//*?DO?NOT?EDIT?THIS?FILE?-?it?is?machine?generated?*/?
  2. ???#include?<jni.h></jni.h> ??
  3. ???/**//*?Header?for?class?HelloWorld?*/?
  4. ?