如何使用java获取位于Web服务器上的js文件,然后在js文件中执行该函数并获取结果并在java中使用结果。
你们能给我一些代码片段吗?非常感谢。
答案 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)
此过程有三个步骤:
第一步非常简单,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的教程,可能很有用。