当前位置: 首页 > 教程 > Java8 >

Java8 JavaScript Nashorn

精华
小牛编辑
136浏览
2023-03-14

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