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 代码
- public class HelloWorld {
- public native void displayHelloWorld();
- public native String getUserName();
- static {
- System.loadLibrary("hello");
-
- }
-
-
-
- public HelloWorld(){
- }
- public static void main(String[] args) {
-
- String s = new HelloWorld().getUserName();
- System.out.println("successful "+s);
-
- }
- }
2)用javac编译HelloWorld
3)用javah产生HelloWorld.h文件。它好比java中的一个接口。
c 代码
-
- #include <jni.h></jni.h>
-
-
- #ifndef _Included_HelloWorld
- #define _Included_HelloWorld
- #ifdef __cplusplus
- extern "C" {
- #endif
-
-
-
-
-
- JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
- (JNIEnv *, jobject);
-
-
-
-
-
-
- JNIEXPORT jstring JNICALL Java_HelloWorld_getUserName
- (JNIEnv *, jobject);
-
- #ifdef __cplusplus
- }
- #endif
- #endif
4)编写一个*.c(HelloWorldImp.c)的文件。它好比一个接口的实现。
c代码
- #include <jni.h></jni.h>
- #include "HelloWorld.h"
- #include <stdio.h></stdio.h>
-
- JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
- {
- printf("Hello world!\n");
-
- }
-
- JNIEXPORT jstring JNICALL Java_HelloWorld_getUserName (JNIEnv *env, jobject obj){
- jstring jstr;
- char str[]=" Rami very good! yes!\n";
- jstr = (*env)->NewStringUTF(env,str);
-
- return jstr;
-
- }
5) 编写一个applet程序来调用HelloWord。Applet1.java
java 代码
- import java.applet.Applet;
- import java.awt.*;
-
-
-
- public class Applet1 extends Applet {
-
-
-
- public String UserName="applet call jni";
-
- public void init(){
- try{
- System.out.println("test");
-
- System.out.println(new HelloWorld().getUserName());
- System.out.println("test end");
- }catch(Exception e){
- e.printStackTrace();
- System.out.println(e);
- }
- }
-
- public void paint(Graphics g) {
- g.drawString("Hello:"+UserName,20,20);
- }
-
-
-
- public void setUserName(String UserName){
- this.UserName = UserName;
- }
- public String getUserName(){
- return UserName;
- }
-
- public void test(){
- try{
- System.out.println("test");
-
- UserName = new HelloWorld().getUserName();
- System.out.println();
-
- System.out.println("test end******");
- }catch(Exception e){
- e.printStackTrace();
- System.out.println(e);
- }
- }
- }
6)编写一个jsp文件调用applet。jniApplet.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<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;
}
</script>
</head>
<body>
<table>
<tr>
<td align="center" >
<applet ID='myApplet' Name='myApplet' code='Applet1.class' width='120' height='30' codebase=".\jar" archive="monitor.jar">
</applet>
</td>
<td align="center" valign="bottom" nowrap>
<form name=form1 >
Your Name:<input name=UserName size=10>
<input type=Button name=Btn value="Change Name" language="JavaScript" onclick="return changeUserName();">
</form>
</td>
</tr>
</table>
</body>
</html>
7)对刚才编译出来的文件进行打包,这样有利于applet的下载速度。
jar cvf monitor *.*
8)部署web程序
9)对客户端修改安全权限文件。此文件在jdk的安装目录下。但测试发现在C:\Program Files\Java\j2re1.4.2_06\lib\security也有一个安全文件,也许是浏览调用的安全文件,就修改它。
java 代码
-
-
-
- keystore "file:/C:/j2sdk1.4.2_06/jre/lib/security/cacerts", "JKS";
-
- grant codeBase "file:${java.home}/lib/ext/*" {
- permission java.security.AllPermission;
- };
- grant signedBy "monitor", codeBase "http://192.168.1.35:8080/" {
- permission java.security.AllPermission, signedBy "monitor";
- permission java.lang.RuntimePermission "usePolicy";
- permission java.lang.RuntimePermission "createClassLoader", signedBy "monitor";
- permission java.lang.RuntimePermission "getClassLoader";
- permission java.lang.RuntimePermission "setContextClassLoader";
- };
-
- grant {
- permission java.lang.RuntimePermission "stopThread";
- permission java.net.SocketPermission "localhost:1024-", "listen";
- permission java.util.PropertyPermission "java.version", "read";
- permission java.util.PropertyPermission "java.vendor", "read";
- permission java.util.PropertyPermission "java.vendor.url", "read";
- permission java.util.PropertyPermission "java.class.version", "read";
- permission java.util.PropertyPermission "os.name", "read";
- permission java.util.PropertyPermission "os.version", "read";
- permission java.util.PropertyPermission "os.arch", "read";
- permission java.util.PropertyPermission "file.separator", "read";
- permission java.util.PropertyPermission "path.separator", "read";
- permission java.util.PropertyPermission "line.separator", "read";
- permission java.util.PropertyPermission "java.specification.version", "read";
- permission java.util.PropertyPermission "java.specification.vendor", "read";
- permission java.util.PropertyPermission "java.specification.name", "read";
- permission java.util.PropertyPermission "java.vm.specification.version", "read";
- permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
- permission java.util.PropertyPermission "java.vm.specification.name", "read";
- permission java.util.PropertyPermission "java.vm.version", "read";
- permission java.util.PropertyPermission "java.vm.vendor", "read";
- permission java.util.PropertyPermission "java.vm.name", "read";
- permission java.lang.RuntimePermission "createClassLoader";
- permission java.lang.RuntimePermission "getClassLoader";
- permission java.lang.RuntimePermission "setContextClassLoader";
-
- permission java.security.AllPermission;
- permission java.lang.RuntimePermission "usePolicy";
- permission java.lang.RuntimePermission "createClassLoader";
- permission java.lang.RuntimePermission "getClassLoader";
- permission java.lang.RuntimePermission "setContextClassLoader";
- };
-
- grant {
- permission java.lang.RuntimePermission "loadLibrary.hello";
- };
10)在客户端配置dll。在环境变量path中设置dll所在的位置。
就这样应该大功告成了,
不知道各位有没有这样的需求,有没有更好的方法呢? 能给出意见和建议吗?谢谢
分享到:
相关推荐
JavaApplet与JavaScript的使用
Javascript与Applet之间能够相互通讯给我们带来了很多方便,Java与JavaScript互相补充,以开发功能更完美的Web应用程序。B/S下能够充分利用java的优势,给我们带来更多的网络体验,方便用户。
Java的线程和Java AppletJava的线程和Java AppletJava的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet
用applet实现读卡IC卡信息的例子,用java实现
适合人群: 具备一定编程基础,对 Java 语言和 Java Applet 技术感兴趣的开发人员,尤其是希望了解如何在浏览器环境下进行实时通信的前端开发者。 能学到什么: ① Java Applet 技术的基本概念和原理;② 如何使用 ...
如何实现java applet与servlet通讯
可控制键盘按键 当applet用需要签名才有权限
过灵活使用从JavaScript语言中访问Java的方法、从JavaScript中访问JavaScript小...的方法与变量,以及在Java Applet小程序中使用JavaScript等技术,实现这几种网页开发语言的 互相补充,以开发更完美的Web应用程序。
实现图书查询的详细查询和模糊查询,用JAVA APPLET实现、基于B/S网络版
java 调用dll文件相关 资料 ,applet调用本地资源的解决方案 等;整合了网上主流的解决方法
最近要用javaapplet开发项目,在csdn上搜过了applet的用法和例子进行下载,还有一些网上比较好的教程全都整合了起来。内置有: Java+Applet实例讲解(分为1和2两部分)、Java+Applet实例编程、java+Applet登录、Java...
(Java毕业设计)聊天系统(java+applet)(Java毕业设计)聊天系统(java+applet)(Java毕业设计)聊天系统(java+applet)(Java毕业设计)聊天系统(java+applet)(Java毕业设计)聊天系统(java+applet)(Java毕业设计)聊天系统...
一些JavaApplet小程序应用源码例子集,包括小应用程序与应用程序组合、在Applet中弹出窗口、通过HTML文件向Applet传递参数、swing的使用等。
通过比较分析C/S与B/S两种模式,确定采用B/S模式,并且构建了系统开发的软件平台和运行环境,综合利用数据库技术、网络通讯技术、Java Applet等技术,对基于B/S结构的带式输送机故障诊断系统的设计和实现问题进行了...
javaapplication和javaapplet的区别
基于JAVA的ICQ系统的设计于实现 聊天系统 (java+applet)基于JAVA的ICQ系统的设计于实现 聊天系统 (java+applet)基于JAVA的ICQ系统的设计于实现 聊天系统 (java+applet)基于JAVA的ICQ系统的设计于实现 聊天系统 (java...
转载:applet来操作本地文件。 数字签名:采用加密技术来实现对签名者身份的认证和数据的完整性。简单的说就是你签字的文件别人知道是你签的,并且知道这个文件是否被修改过。 我们可以通过 数字签名 applet的jar...
基于java+applet实现家庭理财系统(java+applet+系统ppt文档) 基于java+applet实现家庭理财系统(java+applet+系统ppt文档) 基于java+applet实现家庭理财系统(java+applet+系统ppt文档) 基于java+applet实现家庭理财...
本文主要介绍了在JDK和Eclipse下Java_Applet的编写和运行方式。