在Java类方法中嵌入JavaScript代码段

时间:2014-06-26 15:34:41

标签: java javascript tree-traversal

我有一个打开,读取和写入多个文件的java程序。它还包含复杂的逻辑格式。

现在我在jsfiddle上写了一个简单的javascript here来为我做一些树遍历和解析,它比在Java中实现要容易得多。

我现在的挑战是如何将这个Javascript脚本“嵌入”我的Java方法。我主要是一个Java编码器。

Java方法的伪代码是这样的:

<Java method begins……>

      String input = “ABC”  //its more complex than ABC
      String o1= null;
         //JavaScript script begins,
             //Javascript evaluates the Java string input
             //Javascript output is assigned to Java o1
               o1 =  output;
        //Javascript script ends 

    //maniputate and process Java string o1 - which is not null
<Java method ends>

3 个答案:

答案 0 :(得分:2)

使用Java 8非常简单。您可以使用Nashorn。

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class JsTest {

  @org.junit.Test
  public void test() throws Exception  {
    ScriptEngine jsEngine = new ScriptEngineManager().getEngineByName("nashorn");
    jsEngine.eval("var say = function(name) {return 'Hello ' + name;}");

    Invocable jsScript = (Invocable) jsEngine;

    Object result = jsScript.invokeFunction("say", "XYZ");
    System.out.println(result);
  }
}

eval方法有各种可能的参数。也可以从文件加载脚本。

可在此处找到一个好的教程:http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial

答案 1 :(得分:1)

你可以做两件事之一。

  1. 将代码翻译成Java。很简单,取决于代码大小。主要是您需要将var更改为键入的变量。

  2. 使用Rhino等Javascript引擎,您可以在其中提供Javascript并获取输出。

答案 2 :(得分:0)

就个人而言,我会避免为此目的将JavaScript嵌入到Java代码中,并使用标准Java来实现。您可以使用各种String处理库来构建Java。

如果您尝试做的事情在使用字符串运算符和正则表达式的Java中无法实现,我会感到非常惊讶。

我还想象一下,将一个String传递给JavaScript进行处理然后传回Java,会有很大的性能影响。在Java中完成所有操作会更有意义,也更有效率。

不确定您如何在Java中嵌入JavaScript,但有些JS库可能值得关注(this link to Nashorn (a bit like Rhino) may help)。除非绝对必要,否则我会避免使用它。