瀏覽器客戶端js中調用java代碼 – JAVA編程語言程序開發技術文章

上一篇是直接在客戶端調用服務器端的方法,不過其實可以直接在客戶端調用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 < j; 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
<!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=UTF-8″>
<title>Insert title here</title>
</head>
<body>
<APPLET id=”engine” CODE = “com.agent.util.ScriptEngine” JAVA_CODEBASE = “./” ARCHIVE = “Engine.jar”  WIDTH = “0” HEIGHT = “0”>
</APPLET>
<script type=”text/javascript”>
//直接調用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);
}
</script>
<input type=”button” onclick=”md5();” value=”MD5加密”>
<input type=”button” onclick=”AppletMessage();” value=”AppletMessage”>
<input type=”button” onclick=”initJOptionPane();” value=”JOptionPane”>
</body>
</html>
運行效果:




使用這方法,可以非常方便的調用java類,我們可以把一些js不方便操作的東西,直接放在applet裡面給客戶端調用.但如果調用一些涉及系統安全的功能,jar需要簽名才有足夠權限。
不過這方法最大的不足是需要客戶端jre的支持,使用范圍有限制,隻適合一些企業內部使用的系統


 

發佈留言