posts - 59, comments - 244, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

浏览器客户端js中调用java代码

Posted on 2011-03-09 01:15 penngo 阅读(5786) 评论(1)  编辑  收藏 所属分类: 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的支持,使用范围有限制,只适合一些企业内部使用的系统。


评论

# re: 浏览器客户端js中调用java代码  回复  更多评论   

2011-03-09 11:32 by HiMagic!
applet几乎绝迹了

只有注册用户登录后才能发表评论。


网站导航: