Java8 JavaScript Nashorn
1 Java8 JavaScript Nashorn的介绍
Nashorn是JavaScript引擎。它用于在JVM(Java虚拟机)上动态执行JavaScript代码。Java提供了用于执行JavaScript代码的命令行工具jjs。
您可以通过使用jjs命令行工具并嵌入到Java源代码中来执行JavaScript代码。
2 案例:使用终端执行
以下是在JVM中执行JavaScript代码的分步过程。
1)创建一个文件hello.js。
2)编写以下代码并将其保存到文件中。
var hello = function(){
print("Hello Nashorn");
};
hello();
3)打开终端
4)编写命令jjs hello.js,然后按Enter。
执行命令后,您将看到以下输出。
Hello Nashorn
3 案例:Java代码执行JavaScript文件
您可以直接从Java文件执行JavaScript文件。在以下代码中,我们将在FileReader类的帮助下读取文件hello.js。
/**
* 小牛知识库网: https://www.xnip.cn
*/
import javax.script.*;
import java.io.*;
public class NashornExample {
public static void main(String[] args) throws Exception{
// Creating script engine
ScriptEngine ee = new ScriptEngineManager().getEngineByName("Nashorn");
// Reading Nashorn file
ee.eval(new FileReader("js/hello.js"));
}
}
输出结果为:
Hello Nashorn
4 案例:Java源代码嵌入JavaScript代码
您可以将JavaScript代码嵌入Java源文件中。Java编译器不会抱怨,但是当您拥有大量源代码时,这不是一个好习惯。在以下示例中,我们正在评估JavaScript代码。
/**
* 小牛知识库网: https://www.xnip.cn
*/
import javax.script.*;
public class NashornExample {
public static void main(String[] args) throws Exception{
// Creating script engine
ScriptEngine ee = new ScriptEngineManager().getEngineByName("Nashorn");
// Evaluating Nashorn code
ee.eval("print('Hello Nashorn');");
}
}
输出结果为:
Hello Nashorn
5 案例:嵌入JavaScript表达式
您可以在JavaScript代码中嵌入JavaScript表达式和变量。在以下代码中,我们将变量嵌入到字符串中。要执行此程序,您需要在命令行中传递标志-scripting。
文件: hello.js
var hello = function(msg){
print("Hello ${msg}");
};
hello("Nashron");
命令: jjs -scripting hello.js
输入结果为:
Hello Nashorn
6 案例:JavaScript文件的heredocs
在Nashorn中,heredocs只是多行字符串。您可以在<<后面加上特殊的终止标记EOF来创建它。您也可以在$ {...}表达式中嵌入JavaScript表达式。
文件: hello.js
var message = <<EOF
This is a java script file
it contains multiple lines
of code.
let's execute.
EOF
print(message)
命令: jjs -scripting hello.js
输入结果为:
This is a java script file
it contains multiple lines
of code.
let's execute.
7 案例:Java文件中设置JavaScript变量
您可以将值传递给Java文件中的JavaScript变量。在下面的示例中,我们将变量绑定并传递到JavaScript文件。
文件: hello.js
print("Hello "+name);
文件: NashornExample.java
/**
* 小牛知识库网: https://www.xnip.cn
*/
import javax.script.*;
import java.io.*;
public class NashornExample {
public static void main(String[] args) throws Exception{
// Creating script engine
ScriptEngine ee = new ScriptEngineManager().getEngineByName("Nashorn");
//Binding script and Define scope of script
Bindings bind = ee.getBindings(ScriptContext.ENGINE_SCOPE);
bind.put("name", "Nashorn");
// Reading Nashorn file
ee.eval(new FileReader("js/hello.js"));
}
}
输出结果为:
Hello Nashorn