问题标签 [jsr223]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java + 脚本引擎:JSR223 + 类似替代方案之间的差异
在使用 JSR223 的 Rhino 接口时,我开始遇到一些非常烦人的问题:
- 异常信息不佳(请参阅我的其他 SO 问题)
- 无法使用ScriptableObject(最好将 Javascript
foo
变量设置为具有属性的 Javascript 值,以便我可以设置foo.bar
为foo.baz
其他内容。JSR223 只是让我将根全局变量设置为 Java 值。) - 无法设置只读变量/属性
如有必要,我会考虑切换到 Rhino 作为本机脚本引擎,但这会带来无法支持其他语言的痛苦,而无需付出额外的努力。
除了JSR223还有没有更好的抽象层?
我听说过Bean Scripting Framework,但不确定它有何不同/更差/更好。我也遇到过圣经,对此一无所知。
java - jsr223 + 编写脚本解释器
好的。ScriptEngine.eval(String string)
完整地评估一个字符串,并完整地ScriptEngine.eval(Reader reader)
评估来自 a 的输入Reader
。
因此,如果我有一个文件,我可以打开一个 FileInputStream,在它周围包裹一个 Reader,然后调用scriptEngine.eval(reader)
.
如果我有一个完整的语句作为字符串,我可以调用scriptEngine.eval(string)
.
如果我需要实现交互式解释器,我该怎么办?我有一个用户正在交互式输入多行语句,例如
如果我逐行读取输入,并使用 的字符串形式eval()
,我最终会传递给它不完整的语句,例如function f() {
并得到一个错误。
如果我传入一个 Reader,ScriptEngine
它将永远等到输入完成,并且它不是交互式的。
帮助!
澄清一下:这里的问题是我只能传递ScriptEngine.eval()
完整的语句,作为 ScriptEngine 的客户,如果没有 ScriptEngine 本身的帮助,我不知道输入行何时完成。
Rhino 的交互式 shell 使用 Rhino 的Context.stringIsCompilableUnit()
(参见 LXR 的用法和实现)。
java - Rhino 和 Java 通过 JSR223 进行互操作:使用 Javascript 对象实例
如果我评估:
在通过 JSR223 (ScriptingEngine) 实例化的 Javascript 脚本中,我得到了NativeObject
某种(我在 Eclipse 的调试器中看到这个)并且不知道如何访问它的属性。此外,我什至不知道哪个 .jar 文件(如果有),我需要添加到我的构建路径才能使用相关类,如果我找到一种适用于 Rhino Javascript 的方法,它对杰通。
似乎 JSR223 应该包含对 ScriptingEngine 的与语言无关的访问方法,以提供将返回的对象包装为List<Object>
用于数组或Map<String, Object>
用于关联数组的能力。
有什么建议么?
java - 如何使用 scala 作为脚本语言设置 jsr223 脚本
到目前为止,我已经尝试了 scala 的 jsr223 脚本的 sling 实现,但无法正确设置它。当我这样做时:
除了:
和
也许还有另一个我不知道的实现。
任何帮助表示赞赏
java - JSR223 Javascript 中的回调,Oracle JRE 1.6 和 OpenJDK 1.6 之间的区别(例如安装在 Debian 上)
鉴于以下情况,使用 Oracle JRE 6 运行会给出输出 boo,但 OpenJDK 6 会给出异常
这大概是因为使用 OpenJDK(可能是随它提供的 rt.jar)该函数得到一个java.lang.String
,但使用 Oracle 得到一个 JavaScript 字符串(或可以隐式强制为一个的东西)。
那么哪个更正确呢?Javascript(在这种情况下)是 API,那么我们可以编写 Java 使得 API 对于任何一种实现都相同吗?(如果 OpenJDK 实现“更正确”(并且很可能是未来每个人都会做的事情),那么我猜想更改 API(文档、示例、测试)的投入new String(...)
并不是不可能的,但我除非我更有信心,否则我宁愿不要丑化 API。)
和
java - OSGi 从根本上与 JSR-223 脚本语言发现不兼容吗?
我最近编写了一种小型专业脚本语言,并使用 Maven 导出了一个兼容 OSGi 的包,该包还将服务描述符导出到“ META-INF/services/javax.script.ScriptEngineFactory
”服务注册表文件中。
问题在于,尽管 OSGi 导入和导出包都很好,但服务注册表似乎与 OSGi 不兼容(因为 OSGi 将其捆绑包远离通用类路径并为模块使用单独的类加载器)。
我的问题是,我认为 OSGi 与服务发现机制不兼容是否正确,如果不是,我可以添加什么到我的包元数据中,以便ScriptEngineManager.getEngineFactories()
在 OSGi 环境中列出我的脚本引擎?
java - Java Scripting (JSR223) = 用于模板的 Bean/Script Shell?
我还没有使用过任何东西"java scripting" (JSR223)
,我的问题与 linux(和 windows)有关。
是否有一种简单的方法(在安装脚本语言和 java 之后)来执行以下操作:
- 运行导入模板(=带有占位符/变量的文件)的脚本(以相应的语言)。
- 这进一步导入(从文件系统读取)具有键=值对的配置文件(java 属性文件)
- 并用键值对填充占位符。
- 并将“合并”的内容写入文件系统上的文件中......
(这个脚本应该很容易像“java scriptingenvironment scriptname myparameters”一样调用)
这很容易吗和/或你以前做过吗?你甚至知道之前已经描述/完成的任何链接吗?
非常感谢你!!!!
马库斯
java - 如何使用 JSR 223 保护脚本?
我使用 Groovy 作为动态脚本引擎,以允许我的 Web 应用程序的管理员用户创建小脚本作为界面解决方案的一部分,例如。做简单的字符串操作,tokenize 等等。
不幸的是,这打开了一个很大的漏洞,因为默认情况下脚本引擎会执行任何操作。
我在这里描述了一个演示应用程序:http: //javadude.wordpress.com/2011/06/29/creating-a-zk-groovy-console/
您可以执行System.exit(0)
which 关闭 AS 甚至 shell 命令,如"ls -l".execute().text
或只是窥探系统设置println InetAddress.localHost.hostAddress
我可以在执行之前进行字符串检查,例如过滤System.xyz
或execute.xyz
有什么经验或食谱吗?
谢谢
斯文
php - JSR-223 - 在哪里可以找到 ScriptServlet?
我很困惑我应该在哪里找到com.sun.script.http.ScriptServlet
我在网络上的大量样本中看到的。
JSR-223 是否包含在 JDK 1.6 中?我见过人们谈论参考实现,但 Oracle 网站上唯一有效的链接似乎不包含这样的类。我的非本地环境也使用 OpenJDK,我怀疑它是否会有任何 JSR-223 的 Sun 实现!在这种情况下,我可以从哪里得到它?我什至不确定在这种情况下“它”是什么:/
我希望能够使用 PHP 作为视图技术,从 Servlet 调用。我收集 JSR-223 的设计考虑到了这种用法,但我很难弄清楚
编辑
特别是一份指南(http://acet.rdg.ac.uk/projects/vre/jsr223inst.php)提到了通过 JNI 调用 PHP,这听起来很理想。如果作为最终规范的一部分存在允许我通过 Servlet 执行此操作的内容,我将是一只非常高兴的兔子。
java - 识别已经执行的脚本 - JSR 223
我正在考虑使用 JSR 223 在应用程序中提供 Jython 脚本。我有点害怕有人编写无限循环,最终需要重新启动整个 Web 应用程序。我一直在寻找一种制作“当前执行”脚本列表的方法(以构建某种“ps”命令的想法)和某种杀死它们的方法,但我在 API 中看不到任何会提供的。有任何想法吗?