前提条件
jdk≥1.6
运行方法
准备段JS代码, 另存为test.js文件
function test(str){
return '方法执行成功:入参为' + str;
}
java代码:
import javax.script.*;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class JsTest {
public static void main(String[] args) {
try {
//创建一个脚本引擎管理器
ScriptEngineManager manager = new ScriptEngineManager();
//获取一个指定的名称的脚本管理器
System.out.println("当前 JDK 支持的脚本语言引擎:");
for (ScriptEngineFactory available : manager.getEngineFactories()) {
System.out.println(available.getEngineName());
System.out.println(available.getNames());
}
//输出 [nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript]
ScriptEngine engine = manager.getEngineByName("ECMAScript");
engine.eval(new FileReader("C:\\Users\\Administrator\\Desktop\\test.js"));
//从脚本引擎中返回一个给定接口的实现
Invocable invocable = (Invocable) engine;
String aaa = (String)invocable.invokeFunction("test", "测试参数");
System.out.println(aaa );
} catch (ScriptException | NoSuchMethodException | FileNotFoundException e) {
e.printStackTrace();
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
}
坑点
- 调试JS文件中的代码:可以在JS文件中需要打印的地方,通过print() 方法 输出内容,这样在java开发工具中就能看到输出的内容
- 使用new Date()方法:js文件中有用到
new Date(xxx)方法时,改成这样new Date(parseInt(xxx)),先转成int再使用 - ES6的支持:jdk默认是关闭了对es6的支持的,想要开启对es6的支持,需要设置一下jvm参数
-Dnashorn.args=--language=es6 - 三元表达式:如果运行时提示三元表达那行有报错,可以尝试改成if else
- JDK1.8对toLocaleString方法解析异常:参考https://stackoverflow.com/questions/45373338/tolocalestring-in-nashorn-engine,能升级JDK尽量升级高版本的
Web前端(W3Cways.com) - Web前端学习之路