首先需要了解ie调用applet是需要访问jar包中的文件的,而jar包中的文件必须是经过签名认证的,否则会被浏览器禁止的。而jar包中的java类文件必须是继承自java.applet.Applet。
下面是applet签名的:
keytool -genkey -validity 1800 -keystore applet.store -alias applet
keytool -export -keystore applet.store -alias applet -file applet.cer
jarsigner -keystore applet.store jasperreports-3.0.1-applet.jar applet
上面jasperreports-3.0.1-applet.jar里面的类文件继承了java.applet.Applet,是自己写的applet。
在这applet中我的代码如下(我实现的是一个简单的调用客户端的程序)
package com.isoftstone.ireport;
import java.applet.Applet;
public class CallIReportApplet extends Applet {
static {
System.setSecurityManager(null);
}
public void init(){
System.out.println("callIreportApplet init()");
String ireportSetUpBatStr = "D:\\Program Files\\JasperSoft\\iReport-3.0.0\\bin\\startup.bat";
try {
Runtime rt = Runtime.getRuntime();
rt.exec(ireportSetUpBatStr);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
jsp页面调用applet的时候代码如下:
function aaa(){
document.write('<OBJECT id="myApplet"');
document.write('classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" WIDTH="0" HEIGHT="0" MAYSCRIPT name="myApplet"');
//jre的相对路径,也就是当前这个js所在的相对路径
document.write('codebase="../../applets/jre-1_5_0_18-windows-i586-p.exe">');
//你要调用的applet的全名,包名和文件名,该java类必须继承自applet
document.write('<PARAM NAME="CODE" VALUE="com.isoftstone.ireport.CallIReportApplet" />');
//applet的jar包所在的相对路径
document.write('<PARAM NAME="CODEBASE" VALUE="../../applets" />');
//applet的jar包名字
document.write('<PARAM NAME="ARCHIVE" VALUE="CallIReport.jar" />');
document.write('<PARAM NAME="type" VALUE="application/x-java-applet;version=1.5.0" />');
document.write('<PARAM NAME="scriptable" VALUE="false" />');
document.write('<PARAM NAME="REPORT_URL" VALUE="../../comm.view">');
document.write('<comment>');
document.write('<embed type="application/x-java-applet;version=1.5.0"');
//你要调用的applet的全名,包名和文件名
document.write('CODE="com.isoftstone.ireport.CallIReportApplet"');
//applet的jar包所在的相对路径 和 jar包的名字
document.write('JAVA_CODEBASE="../../applets" ARCHIVE="CallIReport.jar"');
document.write('scriptable=false');
//jre的相对路径,也就是当前这个js所在的相对路径
document.write('pluginspage="../../applets/jre-1_5_0_18-windows-i586-p.exe">');
document.write('<noembed></noembed>');
document.write('</embed>');
document.write('</comment>');
document.write('</OBJECT>');
}