gpt4 book ai didi

java - 如何使用 ScriptEngineManager 方法 getEngineByName ("nashorn")添加参数?

转载 作者:行者123 更新时间:2023-11-30 02:47:45 55 4
gpt4 key购买 nike

我正在将 Nashorn 与 Java API 8 一起使用。我想保护 javascript 执行,以确保代码无法调用 Java 包。

可能如下:

NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine("-strict", "--no-java", "--no-syntax-extensions");

但是,直接使用 NashornScriptEngineFactory 并不是很好。

最好的方法是使用ScriptEngineManagerNashornScriptEngineFactoryScriptEngineManager 用于创建 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 根本不提供“引擎配置选项”!

使用 Nashorn 特定 API 的确切问题是什么?您觉得您正在使用特定于引擎的 API 吗?但随后您将使用特定于引擎的选项 - 其他引擎将不支持该选项。因此,无论如何,您都与特定的引擎实现相关联。

还有另一种系统属性方法可以指定 Nashorn 选项。您可以定义系统属性“nashorn.args”。此属性是进程范围的,因此将由 Java 进程中创建的所有 Nashorn 引擎使用。

另请参阅:https://wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes

关于java - 如何使用 ScriptEngineManager 方法 getEngineByName ("nashorn")添加参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39657103/

55 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com