关键字:jarsigner 找不到证书链
注意:JAVA最好用安装版的,否则可能浏览器找不到applet插件
详见如下代码:
1、Applet类
package com;
import java.applet.*;
import java.awt.*;
import java.io.IOException;
public class HelloApplet extends Applet {
public void paint(Graphics g) {
g.drawRect(0, 0, 499, 149);
g.drawString("Hello World", 5, 70);
}
/**
* 通过applet调用本地的计算器
*/
public void openApp() {
String url = "C:\\WINDOWS\\system32\\calc.exe";
System.out.println("url=" + url);
try {
Runtime.getRuntime().exec(url);
} catch (IOException e) {
e.printStackTrace();
}
}
}
2、调用此applet.jar的JSP页面
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>demo</title>
</head>
<body>
<APPLET CODE="com.HelloApplet.class" id="helloApplet" codebase="." ARCHIVE = "test_applet.jar" WIDTH="500" HEIGHT="150">
</APPLET>
<p><a href="#" οnclick="openApp()">计算器</a></p>
<script type="text/javascript">
function openApp()
{
var helloApplet = document.getElementById("helloApplet");
helloApplet.openApp();
}
</script>
</body>
</html>
可以见到,Applet中调用了windows系统的计算器,基于applet的沙箱机制,它是不可能访问的,要想访问就必须对test_applet.jar进行签名。(惭愧的是,我刚刚重新生成了test_applet.jar,未签名,好像也能访问calc.exe,奇怪了)
1、产生密钥库
keytool -genkey -keystore hello.store -alias hello
2、产生证书
keytool -export -keystore hello.store -alias hello -file
hello.cert
3、将密钥库与test_applet.jar绑定
jarsigner -keystore hello.store test_applet.jar hello
4、查看test_applet.jar的签名
jarsigner -verify -verbose -certs test_applet.jar
refurl:http://hi.baidu.com/dobodo/item/2552fc01d26296d11ff046b9
http://blog.csdn.net/jacksonlai/article/details/2833221
另外,注意java.policy的位置:
applet调用本地程序时,需要修改java.policy,而这个java.policy的位置在:C:\Program Files\Java\jre6\lib\security,不是C:/Program Files (x86)/Java/jdk1.6.0_35/JRE/的位置,这一点要注意!
============================================================
附上applet中产生按钮,然后直接点击此按钮和服务器通讯。
refurl:http://www.cafeaulait.org/course/week6/13.html
============================================================
applet调用第三方jar时,都须放在archive属性里,如果有多个,用逗号隔开。