如何使用java获取js文件并执行它,然后获得结果

如何使用java获取js文件并执行它,然后获得结果,java,javascript,Java,Javascript,如何使用java获取位于web服务器上的js文件,然后执行js文件中的函数,获取结果并在java中使用结果 你们能给我一些代码片段吗?非常感谢。您可以使用Java内置的脚本引擎: import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public static void main(String[] args) throws Exception { ScriptEngineManager mg

如何使用java获取位于web服务器上的js文件,然后执行js文件中的函数,获取结果并在java中使用结果


你们能给我一些代码片段吗?非常感谢。

您可以使用Java内置的脚本引擎:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public static void main(String[] args) throws Exception {
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("JavaScript");

    Object result = engine.eval("my-java-script-code") 
    System.out.println("Result returned by Javascript is: " + result);
}

这里有一个更详细的说明。

这个过程有三个步骤:

  • 从服务器获取JS文件
  • 从文件中执行一些JS函数
  • 提取结果
  • 第一步相当简单,Java中有很多HTTP库可以做到这一点——您实际上希望模拟wget或curl之类的简单功能。执行此操作的确切方式取决于下一步希望JS文件采用的格式,但获取字节流的过程很简单

    第二步需要在Javascript引擎中执行JS。Java本身无法解释Javascript,因此您需要获得一个引擎来运行它——这是一个常见的选择。因为您需要在Java之外运行这个程序,所以您可能需要使用Rhino生成一个用于执行的进程。此外,根据Javascript的格式,您可能需要创建自己的“包装器”Javascript,其功能类似于Java中的主类,并调用有问题的方法

    最后,您需要得到结果——显然,您无法从Java程序直接访问JavaScript对象。最简单的方法是让JS程序将结果打印到标准输出(根据对象的复杂程度,可能序列化为类似JSON的内容),由于启动Rhino进程的方式,该结果将直接流式传输到Java应用程序。这可能是JS包装器脚本的另一项工作,如果有的话。否则,如果JS函数有明显的副作用(创建文件/修改数据库),那么您可以直接从Java查询这些副作用

    工作完成了


    我希望你意识到这个问题太模糊了,无法得到完整的答案。要求公众设计一个完整的系统超出了你可以得到有用的、可操作的响应的范围。

    在网络上有很多关于如何设计的例子

    Sun版本的JDK和JRE包括脚本引擎

    假设您已经将javascript文件的内容存储在一个名为“script”的字符串中,您可以按如下方式执行脚本

     String result = null;
     ScriptEngineManager mgr = new ScriptEngineManager();
      ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
      try {
        jsEngine.eval(script);
        result = jsEngine.get("result")
      } catch (ScriptException ex) {
          ex.printStackTrace();
      } 
    
    结果将从引擎中提取并存储在“结果”变量中

    这是一个可能有用的教程