如何使用 ScriptEngineManager 方法 getEngineByName("nashorn") 添加参数?
How to add arguments with the ScriptEngineManager method getEngineByName("nashorn")?
我正在将 Nashorn 与 Java API 8 一起使用。我想保护 javascript 执行以确保代码无法调用 Java 包。
可能如下:
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine("-strict", "--no-java", "--no-syntax-extensions");
然而,直接使用NashornScriptEngineFactory
并不是很好。
好的方法是使用ScriptEngineManager
。 NashornScriptEngineFactory
是 ScriptEngineManager
用来生成 ScriptEngine
实例的工厂。在这个 documentation :
中有解释
This package provides the javax.script integration, which is the
preferred way to use Nashorn. You will ordinarily do this to obtain an
instance of a Nashorn script engine:
import javax.script.*;
...
ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("Nashorn");
我没有找到使用 ScriptEngineManager
创建 ScriptEngine
并能够提供一些额外参数的解决方案,例如 "-strict", "--no-java", "--no-syntax-extensions"
.
谁能帮我解决这个问题?提前谢谢你。
嗯,javax.script 是通用的 API,可用于任何脚本语言实现。按照设计,API 根本不提供 "engine configuration options"!
使用 Nashorn 特定 API 的确切问题是什么?您觉得您使用的是特定于引擎的 API 吗?但是你正在使用特定于引擎的选项——其他引擎不支持这些选项。因此,无论如何,您都依赖于特定的引擎实现。
还有另一种系统 属性 方式来指定 Nashorn 选项。您可以定义系统 属性 "nashorn.args"。此 属性 是进程范围的,因此将由您的 Java 进程中创建的所有 Nashorn 引擎使用。
另请参阅:https://wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes
我正在将 Nashorn 与 Java API 8 一起使用。我想保护 javascript 执行以确保代码无法调用 Java 包。
可能如下:
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine("-strict", "--no-java", "--no-syntax-extensions");
然而,直接使用NashornScriptEngineFactory
并不是很好。
好的方法是使用ScriptEngineManager
。 NashornScriptEngineFactory
是 ScriptEngineManager
用来生成 ScriptEngine
实例的工厂。在这个 documentation :
This package provides the javax.script integration, which is the preferred way to use Nashorn. You will ordinarily do this to obtain an instance of a Nashorn script engine:
import javax.script.*; ... ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("Nashorn");
我没有找到使用 ScriptEngineManager
创建 ScriptEngine
并能够提供一些额外参数的解决方案,例如 "-strict", "--no-java", "--no-syntax-extensions"
.
谁能帮我解决这个问题?提前谢谢你。
嗯,javax.script 是通用的 API,可用于任何脚本语言实现。按照设计,API 根本不提供 "engine configuration options"!
使用 Nashorn 特定 API 的确切问题是什么?您觉得您使用的是特定于引擎的 API 吗?但是你正在使用特定于引擎的选项——其他引擎不支持这些选项。因此,无论如何,您都依赖于特定的引擎实现。
还有另一种系统 属性 方式来指定 Nashorn 选项。您可以定义系统 属性 "nashorn.args"。此 属性 是进程范围的,因此将由您的 Java 进程中创建的所有 Nashorn 引擎使用。
另请参阅:https://wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes