`
hgq0011
  • 浏览: 554623 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

    博客分类:
  • J2SE
阅读更多

     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.  
  5.    #ifndef _Included_HelloWorld  
  6.    #define _Included_HelloWorld  
  7.    #ifdef __cplusplus   
  8.    extern "C" {  
  9.    #endif   
  10.    /**//*  
  11.     * Class:     HelloWorld  
  12.     * Method:    displayHelloWorld  
  13.     * Signature: ()V  
  14.     */  
  15.    JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld   
  16.      (JNIEnv *, jobject);   
  17.   
  18.    /**//*  
  19.     * Class:     HelloWorld  
  20.     * Method:    getUserName  
  21.     * Signature: ()Ljava/lang/String;  
  22.     */  
  23.    JNIEXPORT jstring JNICALL Java_HelloWorld_getUserName   
  24.      (JNIEnv *, jobject);  
  25.  
  26.    #ifdef __cplusplus   
  27.    }  
  28.    #endif  
  29.    #endif  

 4)编写一个*.c(HelloWorldImp.c)的文件。它好比一个接口的实现。

c代码
  1. #include <jni.h></jni.h>  
  2.  #include "HelloWorld.h"  
  3.  #include <stdio.h></stdio.h>   
  4.   
  5.  JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)    
  6.  {   
  7.      printf("Hello world!\n");//这个例子中只输出一行Hello World!   
  8.     // return;   
  9.  }   
  10.   
  11.  JNIEXPORT jstring JNICALL Java_HelloWorld_getUserName  (JNIEnv *env, jobject obj){   
  12.    jstring jstr;   
  13.         char str[]=" Rami very good! yes!\n";   
  14.      jstr = (*env)->NewStringUTF(env,str);   
  15.      //printf(str);   
  16.         return jstr;   
  17.   
  18.  }   

5) 编写一个applet程序来调用HelloWord。Applet1.java

java 代码
  1. import java.applet.Applet;   
  2.   import java.awt.*;   
  3.   
  4.   
  5.   
  6.   public class Applet1 extends Applet {   
  7.     /** *//**  
  8.     * @param args the command line arguments  
  9.     */  
  10.     public String UserName="applet call jni";   
  11.   
  12.   public void init(){   
  13.     try{      
  14.      System.out.println("test");   
  15.     //new HelloWorld().displayHelloWorld();   
  16.     System.out.println(new HelloWorld().getUserName());   
  17.     System.out.println("test end");   
  18.     }catch(Exception e){   
  19.     e.printStackTrace();   
  20.     System.out.println(e);   
  21.     }   
  22.    }   
  23.   
  24.     public void paint(Graphics g) {   
  25.        g.drawString("Hello:"+UserName,20,20);   
  26.     }   
  27.   
  28.   
  29.   
  30.     public void setUserName(String UserName){   
  31.          this.UserName = UserName;   
  32.     }   
  33.      public String getUserName(){   
  34.          return UserName;   
  35.     }   
  36.   
  37.     public void test(){   
  38.    try{      
  39.     System.out.println("test");   
  40.     //new HelloWorld().displayHelloWorld();   
  41.     UserName = new HelloWorld().getUserName();   
  42.     System.out.println();   
  43.     //new Hello().test();   
  44.     System.out.println("test end******");   
  45.     }catch(Exception e){   
  46.     e.printStackTrace();   
  47.     System.out.println(e);   
  48.     }    
  49.     }   
  50.   }  

6)编写一个jsp文件调用applet。jniApplet.jsp

&lt;%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
  &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  &lt;html>
  &lt;head>
  &lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  &lt;title>无标题文档&lt;/title>
  &lt;script language="JavaScript">
  function changeUserName(){
     aaa = new String(document.form1.UserName.value);
     document.myApplet.setUserName(aaa);
     var s = document.myApplet.getUserName();
     document.myApplet.test();
     var ss = document.myApplet.getUserName();
     alert(ss);
     document.form1.UserName.value = ss;
     document.myApplet.repaint();
     return false;
  }

  &lt;/script>
  &lt;/head>

  &lt;body>
  &lt;table>
  &lt;tr>
    &lt;td align="center" >
        &lt;applet ID='myApplet' Name='myApplet' code='Applet1.class'  width='120' height='30' codebase=".\jar" archive="monitor.jar">
        &lt;/applet>
    &lt;/td>
    &lt;td align="center" valign="bottom" nowrap>
        &lt;form name=form1 >
      Your Name:&lt;input name=UserName size=10>
        &lt;input type=Button name=Btn value="Change Name" language="JavaScript" onclick="return changeUserName();">
        &lt;/form>
    &lt;/td>
  &lt;/tr>
  &lt;/table>
  &lt;/body>
  &lt;/html>

7)对刚才编译出来的文件进行打包,这样有利于applet的下载速度。
      jar cvf monitor *.*
    8)部署web程序
    9)对客户端修改安全权限文件。此文件在jdk的安装目录下。但测试发现在C:\Program Files\Java\j2re1.4.2_06\lib\security也有一个安全文件,也许是浏览调用的安全文件,就修改它。
java 代码

 

  1. /* AUTOMATICALLY GENERATED ON Thu Feb 24 09:23:05 CST 2005*/  
  2. /* DO NOT EDIT */  
  3.   
  4. keystore "file:/C:/j2sdk1.4.2_06/jre/lib/security/cacerts""JKS";   
  5.   
  6. grant codeBase "file:${java.home}/lib/ext/*" {   
  7.   permission java.security.AllPermission;   
  8. };   
  9. grant signedBy "monitor",  codeBase "http://192.168.1.35:8080/" {   
  10.   permission java.security.AllPermission, signedBy "monitor";   
  11.   permission java.lang.RuntimePermission "usePolicy";   
  12.   permission java.lang.RuntimePermission "createClassLoader", signedBy "monitor";   
  13.   permission java.lang.RuntimePermission "getClassLoader";   
  14.   permission java.lang.RuntimePermission "setContextClassLoader";   
  15. };   
  16.   
  17. grant {   
  18.   permission java.lang.RuntimePermission "stopThread";   
  19.   permission java.net.SocketPermission "localhost:1024-""listen";   
  20.   permission java.util.PropertyPermission "java.version""read";   
  21.   permission java.util.PropertyPermission "java.vendor""read";   
  22.   permission java.util.PropertyPermission "java.vendor.url""read";   
  23.   permission java.util.PropertyPermission "java.class.version""read";   
  24.   permission java.util.PropertyPermission "os.name""read";   
  25.   permission java.util.PropertyPermission "os.version""read";   
  26.   permission java.util.PropertyPermission "os.arch""read";   
  27.   permission java.util.PropertyPermission "file.separator""read";   
  28.   permission java.util.PropertyPermission "path.separator""read";   
  29.   permission java.util.PropertyPermission "line.separator""read";   
  30.   permission java.util.PropertyPermission "java.specification.version""read";   
  31.   permission java.util.PropertyPermission "java.specification.vendor""read";   
  32.   permission java.util.PropertyPermission "java.specification.name""read";   
  33.   permission java.util.PropertyPermission "java.vm.specification.version""read";   
  34.   permission java.util.PropertyPermission "java.vm.specification.vendor""read";   
  35.   permission java.util.PropertyPermission "java.vm.specification.name""read";   
  36.   permission java.util.PropertyPermission "java.vm.version""read";   
  37.   permission java.util.PropertyPermission "java.vm.vendor""read";   
  38.   permission java.util.PropertyPermission "java.vm.name""read";   
  39.   permission java.lang.RuntimePermission "createClassLoader";   
  40.   permission java.lang.RuntimePermission "getClassLoader";   
  41.   permission java.lang.RuntimePermission "setContextClassLoader";   
  42.   
  43.   permission java.security.AllPermission;   
  44.   permission java.lang.RuntimePermission "usePolicy";   
  45.   permission java.lang.RuntimePermission "createClassLoader";   
  46.   permission java.lang.RuntimePermission "getClassLoader";   
  47.   permission java.lang.RuntimePermission "setContextClassLoader";   
  48. };   
  49.   
  50. grant {    
  51.  permission java.lang.RuntimePermission "loadLibrary.hello";    
  52. };   

 

10)在客户端配置dll。在环境变量path中设置dll所在的位置。
 就这样应该大功告成了,

不知道各位有没有这样的需求,有没有更好的方法呢? 能给出意见和建议吗?谢谢

 

分享到:
评论
4 楼 hgq0011 2007-05-07  
<p>
fellow99 写道
这么累人,为啥没有COM,要用applet呢
</p>
<p>用Applet确实有些麻烦。</p>
<p>能告诉我怎样使用COM实现这样的功能吗?谢谢!</p>
<p> </p>
3 楼 fellow99 2007-05-05  
这么累人,为啥没有COM,要用applet呢
2 楼 soleegn 2007-05-04  
对JAR包进行签名就不用改客户端配置了
1 楼 爱我靠边站 2007-04-24  
觉得有用。支持你继续发表

相关推荐

    B/S实现读卡

    "applet.zip"可能是Java小应用程序,传统上用于在浏览器中实现一些复杂功能,可能在这个场景下用于辅助读卡器的通信或模拟读卡操作。 综上所述,"B/S实现读卡"涉及的技术包括但不限于D3.js、RFID读卡技术、前后端...

    JavaApplet与JavaScript

    ### JavaApplet与JavaScript #### 6.1 JavaApplet ##### 6.1.1 JavaApplet概述 **Applet 类层次结构:** JavaApplet 的基础是 `java.applet.Applet` 类,它是从 `java.awt.Panel` 继承而来的一个特殊的图形组件。...

    Javascript与Applet之间相互通讯

    ### JavaScript与Applet之间的相互通讯 #### 一、引言 在早期的Web开发中,JavaScript与Applet的结合为开发者提供了丰富的交互性和强大的功能。本文将深入探讨这两种技术如何协同工作,以及如何在Web应用中实现...

    基于B/S 模式的PACS 的研究与实现

    ### 基于B/S模式的PACS系统研究与实现 #### 一、引言 随着信息技术的快速发展,医学影像存档与通讯系统(PACS)已成为现代医疗领域不可或缺的一部分。传统的PACS系统多采用客户机/服务器(C/S)模式,但在实际应用...

    jni_java_dll_jsp.zip_Java调用dll_applet_java Applet_java dll jsp_j

    Java调用DLL文件是将Java程序与C/C++编写的动态链接库进行交互的技术,主要应用于需要利用非Java原生功能或与已有C/C++库集成的场景。本资料包"jni_java_dll_jsp.zip"提供了关于这个主题的详细资料,特别是针对...

    基于B/S图书查询系统

    本系统旨在通过Java Applet技术实现在B/S架构下的图书查询功能,不仅支持详细的查询方式,还能进行模糊查询,极大地提高了图书检索的灵活性与便捷性。 #### 二、系统架构与技术栈 **1. 架构设计** 本系统采用典型...

    Java与Java+Applet和JavaScript间的混编方法

    ### Java与Java Applet和JavaScript间的混编方法 随着互联网技术的发展,网页应用程序变得越来越复杂,需要多种编程语言和技术的支持。其中,Java、Java Applet 和 JavaScript 是三种重要的客户端脚本语言,在 Web ...

    用applet实现读卡的实现例子

    5. **设备驱动编程**:在Java Applet中,你需要通过设备驱动程序与读卡器进行通信。这通常涉及到Java的`javax.comm`库或者第三方库如`pcsc-lite`,它们提供了与智能卡读卡器交互的API。 6. **安全机制**:由于IC...

    applet与servlet通讯

    7. **使用 RMI (Remote Method Invocation)**:虽然 RMI 不是为浏览器环境设计的,但在特定情况下,通过加密和隧道技术,可以实现 Applet 与 Servlet 之间的 RMI 通信。 每种通信策略都有其优缺点,开发者应根据...

    在JDK和Eclipse下Java_Applet的编写和运行方式

    ### 在JDK和Eclipse下Java Applet的编写与运行详解 #### 一、Java Applet简介 Java Applet是一种可以嵌入到网页中的小型Java应用程序。它可以在支持Java的Web浏览器上运行,使得开发者能够利用Java的强大功能来...

    用applet实现自动从服务器上下载文件

    在IT行业中,Applet是一种基于Java的小程序,它可以在网页中运行,提供各种交互功能。本主题关注的是如何使用Applet来实现一个自动化文件下载功能,即从服务器上下载文件到客户端,而且这个过程无需用户手动操作弹出...

    java applet 操作本地文件

    在Java Applet环境中,数字签名对于增强安全性和实现特定功能(如访问本地文件系统)至关重要。数字签名通过使用公钥加密技术来实现。具体而言,Applet的创建者使用私钥对Applet进行签名,然后用户端(通常是浏览器...

    Java与Java Applet和JavaScript间的混编方法.pdf

    Java与Java Applet和JavaScript混编方法是指在网页开发中,通过灵活使用Java、Java Applet和JavaScript三种语言的优点,实现它们之间的互相补充,开发更完美的Web应用程序。 在Java与JavaScript混编中,可以使用...

    基于Java的B_S结构远程在线监测系统

    - **Applet技术**:在B/S架构下,Applet作为Java的一项核心技术,允许在浏览器端执行Java代码,实现与服务器的动态交互,从而支持复杂的用户界面和实时数据处理。 - **TCP协议**:传输控制协议(TCP)是确保数据可靠...

    Java Applet 技术实现即时通讯程序开发与实践

    适合人群: 具备一定编程基础,对 Java 语言和 Java Applet 技术感兴趣的开发人员,尤其是希望了解如何在浏览器环境下进行实时通信的前端开发者。 能学到什么: ① Java Applet 技术的基本概念和原理;② 如何使用 ...

    JavaApplet_javaapplet小程序_java_

    JavaApplet是Java技术在早期Web开发中的一种重要应用,它允许开发者创建可以在网页中运行的小型程序。这些小程序能够增强交互性,提供动态内容,比如游戏、图表、动画等。JavaApplet运行在用户的浏览器上,由Java ...

    java Application与java Applet的区别

    Java Application适合创建独立运行的复杂应用,而Java Applet则专注于网页增强,提供多媒体效果和交互性,尽管随着Web技术的发展,如JavaScript和HTML5的兴起,Java Applet的使用已逐渐减少,但它在Web发展史上的...

    js与applet的相互调用资源包

    JavaScript(简称JS)和Applet是两种在Web开发中用于增强网页交互性的技术。JavaScript是一种轻量级的脚本语言,通常运行在浏览器端,负责处理用户交互、动态内容更新等任务。Applet则是Java的一个早期特性,允许...

    java网络聊天室b/s

    Java网络聊天室是一种基于B/S(Browser/Server)架构的应用,允许用户通过浏览器与服务器交互进行实时聊天。在这个系统中,客户端使用Java Applet技术,这是一段可以在浏览器环境中运行的小型Java程序。以下是该Java...

Global site tag (gtag.js) - Google Analytics