标签: rhino

你如何使用Java来调用Rhino Javascript解释器?

是否有任何关于使用java方法调用rhino-javascript函数并将其返回给java的示例?我发现rhino的唯一例子是只在rhino shell上输入命令.

javascript java rhino serverside-javascript

10
推荐指数
1
解决办法
1万
查看次数

在javax.scripting javascript环境中导入地图

我在javax.scripting地图实现中看到了一些奇怪的行为.

在线示例显示了在js环境中添加到列表的示例:

ScriptEngineManager mgr = new ScriptEngineManager();
  ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
  List<String> namesList = new ArrayList<String>();
  namesList.add("Jill");
  namesList.add("Bob");
  namesList.add("Laureen");
  namesList.add("Ed");
  jsEngine.put("namesListKey", namesList);
  System.out.println("Executing in script environment...");
  try
  {
   jsEngine.eval("var names = namesListKey.toArray();" + "for(x in names) {" + "  println(names[x]);" + "}"
     + "namesListKey.add(\"Dana\");");
  } catch (ScriptException ex)
  {
   ex.printStackTrace();
  }
  System.out.println(namesList);
Run Code Online (Sandbox Code Playgroud)

但是,如果您尝试使用地图执行类似操作,则会看到奇怪的行为.首先,如果您尝试迭代地图键,例如

 HashMap<String, Object> m = new HashMap<String, Object>();
 jsEngine.put("map", m);
Run Code Online (Sandbox Code Playgroud)

无法获取地图密钥 - 如果您尝试迭代密钥,则会获得方法名称 -

jsEngine.eval(" for (var k in m.keySet()){ println(k)};");
Run Code Online (Sandbox Code Playgroud)

结果是 :

notifyAll
removeAll
containsAll …
Run Code Online (Sandbox Code Playgroud)

java rhino

10
推荐指数
1
解决办法
3760
查看次数

java7/Rhino中编译与解释的javascript的性能

我在Java7中遇到Rhino javascript引擎的性能问题,很快 - 我的脚本(解析和编译文本)在Chrome中运行的速度比Java7 Rhino脚本引擎快50到100倍.

我试图找到改善情况的方法,并发现Rhino支持编译脚本.我尝试用我的脚本做这件事,实际上没有看到任何改进.最后 - 我最终得到了一个虚拟的短测试套件,我认为编译版和解释版之间的性能没有任何差别.请让我知道我做错了什么.

注意:有些消息来源提到Rhino引擎运行编译脚本比直接用Java编写的"相同"代码慢大约1.6.不确定此示例中使用的"脚本编译"是否与假设相同.

测试java类如下,我在我的机器上得到的样本结果......

结果

     Running via com.sun.script.javascript.RhinoScriptEngine@c50443 ... 
      time: 886ms, chars: 38890, sum: 2046720
      time: 760ms, chars: 38890, sum: 2046720
      time: 725ms, chars: 38890, sum: 2046720
      time: 765ms, chars: 38890, sum: 2046720
      time: 742ms, chars: 38890, sum: 2046720
       ... 3918ms


     Running via com.sun.script.javascript.RhinoCompiledScript@b5c292 @ com.sun.script.javascript.RhinoScriptEngine@f92ab0 ... 
      time: 813ms, chars: 38890, sum: 2046720
      time: 805ms, chars: 38890, sum: 2046720
      time: 812ms, chars: 38890, sum: 2046720
      time: 834ms, chars: 38890, sum: 2046720
      time: 807ms, chars: …

javascript rhino java-7

10
推荐指数
1
解决办法
1万
查看次数

如何在Java中将.js文件加载到Rhino上下文中

这是我的情况:

我可以访问Java类中的Rhino Context对象.我想阅读一堆.js文件并将它们传递给Rhino上下文以对它们进行评估.我真的不想在脚本上下文中使用.js文件中的函数,因为我只是在.js文件中声明的变量可用(这是工具验证的一种问题).

理想情况下,我会读入并尝试一次评估每个文件,而不是逐行.我注意到在Context中有一个方法(参见Rhino API)evaluateReader().我的第一个猜测是我应该获取我想要加载的所有文件,仔细检查它们,并调用此方法为每个文件传递某种读取器对象,而且非常好,现在它们都在我的脚本环境中.

因此,假设我在那里正确的轨道,有人可以告诉我在Java脚本环境中使用.js文件是否有任何良好的做法,或者如果有更好的方法,或者你做了一些其他方式等?

这里没有查找实现细节,只是来自其他人的反馈,这可能已经在他们的一些代码中完成了.使用Java编写脚本语言对我来说是新的.

javascript java rhino

9
推荐指数
1
解决办法
7459
查看次数

为rhino构建java脚本调试器

我正在使用tomcat服务器,我已经添加了一个rhino引擎,以便能够为我的用户提供一些脚本功能.第二阶段是提供一些调试环境.

我知道rhino有一个调试API,但我找不到任何关于如何使用它的文档/代码示例,并围绕它构建一个调试器

有谁知道?

javascript java debugging open-source rhino

9
推荐指数
1
解决办法
7460
查看次数

如何将javaScript函数传递给Java方法以充当回调(Rhino)

基本上我正在尝试将javaScript函数传递给Java方法以充当脚本的回调.

我可以做到 - 有点 - 但我收到的对象是sun.org.mozilla.javascript.internal.InterpretedFunction,我没有看到调用它的方法.

有任何想法吗?

这是我到目前为止所拥有的:

var someNumber = 0;

function start() {
   // log is just an log4j instance added to the Bindings
   log.info("started....");
   someNumber = 20;

    // Test is a unit test object with this method on it (taking Object as a param).
    test.callFromRhino(junk);
}

function junk() {
    log.info("called back " + someNumber);
}
Run Code Online (Sandbox Code Playgroud)

javascript java rhino

9
推荐指数
2
解决办法
8260
查看次数

如何从JavaScript调用Java实例的方法?

我正在使用Mozilla Rhino JavaScript模拟器.它允许我将Java方法添加到上下文中,然后将它们称为JavaScript函数.但除非我使用静态方法,否则我无法工作.

问题是这部分文档:

如果方法不是静态的,那么Java'this'值将对应于JavaScript'this'值.任何使用不具有正确Java类型的'this'值调用该函数的尝试都将导致错误.

显然,我的Java"this"值与JavaScript中的值不对应,我不知道如何使它们对应.最后,我想在Java中创建一个实例,并在全局范围内安装几个方法,因此我可以从Java初始化实例,但在我的脚本中使用它.

有没有人有一些示例代码?

javascript java rhino method-call

9
推荐指数
1
解决办法
8665
查看次数

Rhino:如何将字符串从Java返回到Javascript?

我如何使用Rhino从Java返回一个字符串到Javascript,我得到的就是org.mozilla.javascript.JavaNativeObject我使用的时候

var jsString = new java.lang.String("test");
Run Code Online (Sandbox Code Playgroud)

在我的js文件中.

这是正确的方法吗?

var jsString = String(new java.lang.String("test"));
Run Code Online (Sandbox Code Playgroud)

目标是使用Java方法返回String对象,而不是像上面那样动态创建它.

javascript java string rhino

9
推荐指数
1
解决办法
1万
查看次数

你如何从Rhino返回退出代码?

我正在使用java来运行用Rhino编写的命令行实用程序,但如果有错误,我需要将该错误返回给shell,以便处理停止.如何将错误代码从Rhino传回shell?

rhino

8
推荐指数
1
解决办法
1467
查看次数

使用require.js和Java/Rhino解析模块

我正在尝试让require.js在服务器端使用Java 6和Rhino加载模块.

我能够自己加载require.js就好了.犀牛可以看到这个require()功能.我可以说,因为Rhino抱怨说当我换成其他require()东西时它找不到这个功能requireffdkj().

但是当我试图要求一个简单的JS时,就像 hello.js

var hello = 'hello';
Run Code Online (Sandbox Code Playgroud)

使用以下任一方法:

require('hello');
require('./hello');
Run Code Online (Sandbox Code Playgroud)

它不起作用.我明白了

Caused by: javax.script.ScriptException: sun.org.mozilla.javascript.internal.JavaScriptException: [object Error] (<Unknown source>#31) in <Unknown source> at line number 31
    at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:153)
    at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:167)
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247)
Run Code Online (Sandbox Code Playgroud)

我把我hello.js放在Java类路径的顶部.那也是我的地方require.js.我试着移动到hello.js我能想到的任何地方,包括我的硬盘驱动器的根目录,用户目录的根目录,运行我的Java应用程序的目录等等.没有任何作用.

我查看了CommonJS规范(http://wiki.commonjs.org/wiki/Modules/1.0),它说顶级ID(如hello)从"概念模块名称空间根"解析,而相对ID(喜欢./hello)解决调用模块.我不确定这些基线在哪里,我怀疑这是问题所在.

有什么建议?我甚至可以使用Rhino的require.js吗?

编辑:我认为我需要根据Pointy的建议在下面的评论中设置环境,我也尝试过评估r.js.(我在评估之后尝试进行评估require.js,之后再次进行评估require.js.)在任何一种情况下我都会收到错误:

Caused by: javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "arguments" is not defined. (<Unknown source>#19) in <Unknown source> at line number …
Run Code Online (Sandbox Code Playgroud)

javascript java rhino require requirejs

8
推荐指数
1
解决办法
1万
查看次数