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

时间:2010-01-14 17:24:09

标签: java javascript

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

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

3 个答案:

答案 0 :(得分:11)

您可以使用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);
}

这是一个更精细的example

答案 1 :(得分:4)

此过程有三个步骤:

  1. 从服务器获取JS文件。
  2. 从文件中执行一些JS函数。
  3. 提取结果。
  4. 第一步非常简单,Java中有很多HTTP库可以做到这一点 - 你实际上想要模仿像wget或curl这样的简单功能。您执行此操作的确切方式将取决于您希望JS文件用于下一步的格式,但获取字节流的过程很简单。

    第二步需要在Javascript引擎中执行JS。 Java本身无法解释Javascript,因此您需要获取一个引擎来运行它 - Rhino是一个常见的选择。由于您需要在Java之外运行它,因此您可能必须使用ProcessBuilder生成一个在Rhino中执行的进程。此外,根据Javascript的格式,您可能需要创建自己的“包装器”javascript,其功能类似于Java中的主类,并调用相关方法。

    最后,您需要获得结果 - 显然您无法直接访问Java程序中的JavaScript对象。最简单的方法是让JS程序将结果打印到标准输出(可能会根据对象的复杂程序将其序列化为JSON),由于您启动的方式,它直接流式传输到Java应用程序犀牛过程。这可能是您的JS包装器脚本的另一个工作,如果有的话。否则,如果JS函数具有可观察的副作用(创建文件/修改数据库),那么您将能够直接从Java查询这些副作用。

    完成工作。

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

答案 2 :(得分:3)

网上有很多关于如何download a file from a URL的例子。

JDK和JRE的太阳版包括Mozilla Rhino脚本引擎。

假设您已将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();
  } 

结果将从引擎中提取并存储在'result'变量中。

这是scripting in Java的教程,可能很有用。