草庐IT

java - 无缝地将数组和列表传入和传出 Nashorn

我知道您可以在Nashorn中使用Java数组,并且有很多示例说明如何执行此操作。对我来说,标准方法的问题是它使javascript代码明确知道它的运行时环境。目前我有一个使用Rhino的解决方案,它可以在Java类型和nativejavascript类型之间无缝转换。对于Rhino,我通过实现org.mozilla.javascript.ContextFactory和org.mozilla.javascript.WrapFActory并将WrapFactory设置为调用makeContext时的Context。此WrapFactory实现负责Java数组和列表与nativejavas

javascript - 从 JavaScript (Rhino/Nashorn) 中添加和删除 Jar 文件和类

基本上我有一个Java系统,它通过Rhino或Nashorn使用Javascript运行许多“插件”脚本,具体取决于用户安装的JRE。我在Java环境中还有一个系统,允许在运行时插入额外的.JAR文件。一切都很好,花花公子。但是,我现在遇到了一种情况,我想要一些稍微不同的东西:我想从Rhino/Nashorn引擎实例中将一个.JAR文件加载到ClassPath中,以便该实例可以使用这些类(仅该实例),然后在引擎完成运行时删除它们。我知道我可以轻松地调用我现有的Java例程来使用JavaScript加载.JAR文件的URL,但是这些类随后会永久安装,我无法删除它们。问题基本上源于这样一个

java - 如何从 Nashorn 引擎中删除 java api?

是否可以从nashorn-engine中隐藏或删除javaapi?这样它只能看到或使用“默认”ECMAScript262Edition5.1和一些特别暴露的函数/变量?我想让我的最终用户为他们自己创建一些特定的逻辑,而不用担心他们会破解整个系统。当然,nashorn引擎等可能存在一些安全漏洞,但那是另一个话题。编辑:抱歉,我忘了说我在我的Java应用程序中运行nashorn,所以不能使用命令行参数。 最佳答案 以编程方式,您还可以直接使用具有适当getScriptEngine()方法的NashornScriptEngineFacto

使用 Nashorn 编写 Java 脚本 (JSR 223) 和预编译

我正在通过JSR223使用Nashorn来执行用户输入脚本的小片段:publicInvocablebuildInvocable(Stringscript)throwsScriptException{ScriptEngineengine=newScriptEngineManager().getEngineByName(ENGINE);engine.eval(functions);engine.eval(script);return(Invocable)engine;}不同的用户脚本调用在静态中央库中定义的JavaScript函数(保存在上面代码片段中的functions字符串中)。每次我

java - 使用 Java 和 Nashorn 编写脚本的新手,有教程吗?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion是否有任何好的教程或类似的东西来说明这个?尽管我已经熟悉JavaScript,但我还没有用Java编写任何脚本。谢谢。本质上,我想使用JavaScript/XML来处理我的部分项目。我知道Java8通过Nashorn引入了JavaScript支持。我想了解这是如何工作的。我知道它涉及使用javax.script,但我不知道该程序包如何工作,也不了解Nashorn的工作

java - Nashorn 启动慢可以克服吗?

我使用Rhino作为图形内部的脚本组件。项目中大约有200个独立运行的小脚本。启动应用程序时,脚本应立即全速运行。Rhino的性能足够,但由于Oracle建议迁移到Nashorn,我面临两难选择。下图显示了Rhino和Nashorn在大约15,000次脚本调用时的负载差异。Nashorn启动慢是我最大的问题。请注意,这是在JDK1.8.0上返回的。JDK1.8u5类似希望图片清晰。这是我如何使用ScriptEngine的概述:我正在使用一个脚本引擎实例,我为每个脚本创建一个CompiledScript对象,Swingworker执行CompiledScript.eval()一次。Swi

javascript - 我可以从 Java 9 Nashorn 引擎运行 ECMAScript 6 吗

Java9现在包含对ECMAScript6的支持,正如thisarticle所声称的那样.但是,它没有解释如何使用ScriptEngine从Java运行它.链接的Java杂志也没有对其进行解释。文章内容如下:ToactivateES6support,use--language=es6onthecommandline.这确实适用于jjs,但我找不到如何从Java代码启用它的方法。为了测试它,我使用了以下代码:importjavax.script.ScriptEngine;importjavax.script.ScriptEngineManager;importjavax.script.S

java - 在 Servlet 中重用 Nashorn ScriptEngine

这个问题在这里已经有了答案:ShouldIuseaseparateScriptEngineandCompiledScriptinstancespereachthread?(4个答案)关闭4年前。我想在servlet中执行JavaScript。是否可以在所有servlet调用中重用相同的脚本引擎?Servlet实例由多个线程共享。这是否需要为每个请求创建一个新的脚本引擎?那将是NotAcceptable性能损失。举个例子,下面的代码保存了吗?publicclassMyServletextendsHttpServlet{privateScriptEngineManagerfactory;p

java - 如何让 Java 8 Nashorn 变快?

我正在使用Java8Nashorn来渲染CommonMark到HTML服务器端。如果我编译、缓存和重用CompiledScript,某个页面需要5分钟才能呈现。但是,如果我改为使用eval,并缓存和重用脚本引擎,则呈现同一页面需要3秒。为什么CompiledScript这么慢?(示例代码如下)在Nashorn中尽可能快地一遍又一遍地运行Javascript代码的好方法是什么?并避免多次编译Javascript代码?这是以5分钟的方式调用Nashorn的服务器端Scala代码片段:(运行200次时;我正在将CommonMark中的许多注释编译成HTML。)(此代码基于thisblogar

javascript - Nashorn 和 Scala future 到 JS Promise 的转换

我在基于Scala和React/Flux的前端实现了一个服务器端。我的服务返回Futures并在Scalatra的AsyncResult中处理JSON响应。对于同构/服务器端渲染设置,我不想将服务更改为阻塞,所以我从ScalaFuture->java.util.function.Function转换shownhere开始.但是Flux中的调度器想要JSPromise。到目前为止,我只发现这个Slides68-81周围的声音相当复杂。有没有推荐的方法来处理这个ScalaFuture->JSPromise转换? 最佳答案 我将尝试回答问