如何在客户端从JavaScript执行Java文件

时间:2011-02-24 12:37:54

标签: java javascript

我在JAVA中有一个代码/类/脚本,当有人点击我要处理的按钮/任何东西时,我想要执行它。 JavaScript中用于启动客户端系统上安装的类/代码/脚本/编译程序的代码应该是什么?

2 个答案:

答案 0 :(得分:2)

我认为您必须在网页上部署applet,然后才能从javascript调用其方法。

所以,首先你需要appelet,即扩展Applet的类。如果你已经拥有一个,那么你就完成了。否则,您必须创建一个并公开已有的API。 接下来,您应该在网页上部署applet。使用标记<applet><object>执行此操作。它很简单,您可以在互联网上找到很多例子。

现在你必须能够从javascript调用这个applet。这也很简单。例如,你applet的名字(我的意思是html属性名称的值)是myapp,而applet有方法foo(),你可以从这样的javascript中调用它:myapp.foo()

以下是一个例子:

<applet name="myapp" archive="myjar.jar" code="com.company.MyApplet"/>
<script>
    var result = myapp.foo();
</script>

答案 1 :(得分:2)

这取决于您在客户端尝试使用该程序。如果你想在客户端的机器上调用其他程序,你需要做一些事情。

  1. 来自SSL供应商的代码签名证书。
  2. 您需要创建一个扩展Applet的类。
  3. 对于您想在该客户端计算机上执行的任何操作,您需要一个实现java.security.PrivilegedAction的类。
  4. 您现在应该使用objet和embed标签代替applet。
  5. 将属性添加到允许从Javascript编写脚本的object和embed标记。
  6. Java代码

    public class MyApplet extends Applet
    {
       public Object myScriptAction(String arg1, String arg2)
       {
           PrivilegedAction action = new MyAction();
           action.setXXXX();
           Object o = AccessController.doPrivileged(action);
           return o;
       }
    
       private class MyAction implements PrivilegedAction
       {
           public MyAction() {}
           ...
           public Object run()
           {
               // Do something here, Runtime.exec() or something else
               Runtime.getRuntime().exec(cmdarray, envarray, workingDir);
               return myobj;
           }
       }
    }
    

    删除了代码的HTML代码

        object name="myapplet" classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" width="1" height="1"
        param name="name" value="myapplet"
        param name="code" value="com.example.MyApplet"
        param name="codebase" value="<c:out value="/path/to/applet/"
        param name="archive" value="myapplet.jar"
        param name="scriptable" value="true"
        param name="mayscript" value="true"
        comment
            embed
                type="application/x-java-applet;version=1.5"
                code="com.example.MyApplet"
                java_codebase="/path/to/applet/"
                archive="myapplet.jar"
                name="myapplet"
                width="1"
                height="1"
                mayscript="true"
                scriptable="false"
                pluginspage="http://java.sun.com/products/plugin/index.html#download"
                noembed
                        Java not supported.
                noembed
            embed
         comment
    object
    

    关键是允许Javascript调用applet的mayscript和scriptable属性。

    然后使用jarsigner使用您获得的代码签名证书对myapplet.jar进行签名。

    请参阅Sun关于混合浏览器Java插件支持的本指南。

    http://java.sun.com/j2se/1.5.0/docs/guide/plugin/developer_guide/using_tags.html#mixed