####一、基本知识 使用Java8中,Nashorn大大提高了JavaScript 引擎引入,以取代现有的Nashorn Java脚本引擎。Nashorn提供2至10倍更好的性能,因为它直接编译代码在存储器,并传递到字节码JVM.Nashorn使用invokedynamics函数,在Java7引入以提高性能。
jjs:
对于Nashorn引擎,Java8引入了一个新的命令行工具,JJS到控制台执行Java脚本代码。
JJS在交互模式:
打开控制台并使用下面的命令。
localhost:nashorn Kevin$ jjs
jjs> print("复杂的人,简单的需求!");
复杂的人,简单的需求!
jjs> quit();
####二、在Java中调用JavaScript 测试类:
/**
* 在Java中调用JavaScript
*
* @author Kevin
* @date 2017-01-28
*/
public class NashornTest {
public static void main(String args[]) {
// 使用ScriptEngineManager,JavaScript代码用Java编写可以被调用。
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn");
String name = "Kevin";
Integer result = null;
try {
nashorn.eval("print('" + name + "')");
result = (Integer) nashorn.eval("6 + 6");
} catch (ScriptException e) {
System.out.println("Error executing script: " + e);
}
System.out.println(result.toString());
}
}
运行结果:
Kevin
12
三、在JavaScript调用Java
测试的js:
var BigDecimal = Java.type('java.math.BigDecimal');
function calculate(amount, percentage) {
var result = new BigDecimal(amount).multiply(
new BigDecimal(percentage)).divide(
new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN);
return result.toPlainString();
}
var result = calculate(66600, 16.66);
print(result);
运行结果:
localhost:nashorn Kevin$ jjs Nashorn.js
11095.56