上一篇是直接在客户端调用服务器端的方法,不过其实可以直接在客户端调用java代码。以前写过一篇用javascript编写swing程序,不过这种方式是需要java的脚本引擎。在浏览器中也可以使用js来调用java,不过需要借助applet,applet可以直接调用js代码,js也可以直接调用applet代码,只要在applet中实现一个例实例化的接口或直接把实例化后的类返回给js,这样在js中就可以调用java代码。下面开始测试代码。

ScriptEngine.java
import javax.swing.JApplet;
import javax.swing.JOptionPane;
public class ScriptEngine extends JApplet{
public void init() {
}
public Object classInstance(String name){
try{
Class cls = Class.forName(name);
Object obj = cls.newInstance();
return obj;
}
catch(Exception e){
e.printStackTrace();
return null;
}
}
public void showMessage(String ale){
JOptionPane.showMessageDialog(null, ale);
}
public void destroy(){
}
}

测试被调用的代码

MD5.java

import java.security.MessageDigest;
public class MD5 {
public final static String Md5(String s) {
char hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"a", "b", "c", "d", "e", "f" };
try {
byte[] strTemp = s.getBytes();
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(strTemp);
byte[] md = mdTemp.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i 
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
return null;
}
}
}

测试页面

test.jsp

html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Insert title here 
 
//直接调用MD5加密类
function md5(){
var md5 = engine.classInstance("com.agent.util.MD5");
alert(md5.Md5("这是MD5测试!"));
}
//直接调用Applet方法
function AppletMessage(){
engine.showMessage("这是测试数据,AppletMessage!");
}
//直接调用swing组件
function initJOptionPane(){
var file = engine.classInstance("javax.swing.JOptionPane");
file.showMessageDialog(null, "这是直接在js中调用java代码方法!", "测试确认窗口",2);
}

运行效果:

使用这方法,可以非常方便的调用java类,我们可以把一些js不方便操作的东西,直接放在applet里面给客户端调用.但如果调用一些涉及系统安全的功能,jar需要签名才有足够权限。