javax.script package

The JavaTM Scripting APIs a scripting language indepedent framework for using script engines from Java code.

简单的说,javax.script使得在java中使用其它脚本语言成为可能。例如在java代码中运行javascript代码。很有意思吧?

注意虽然javascript只能在浏览器中运行,但是java扩展的类库可以直接运行javascript。其中使用的javascript engine是集成在java6中的Mozilla Rhino


非常好的一篇介绍文章:

http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html


看完上文后,考虑下面这样一个需求: 对下面javascript方法进行语法验证,其中方法中使用的get,put方法是另外两个javascript方法。

function processRulesForRow(row){
    var str= get("InstrumentName");
    var strArr = str.split(":");
    put("Ticker",strArr[0].trim());
}

示例:

import javax.script.*;
public class App {
    public static void main(String[] args) throws Exception {
        // create a script engine manager
        ScriptEngineManager factory = new ScriptEngineManager();
        // create a JavaScript engine
        ScriptEngine engine = factory.getEngineByName("JavaScript");
        // evaluate JavaScript code from String
        engine.eval("function processRulesForRow(row){var str= get(\"InstrumentName\");var strArr = str.split(\":\");put(\"Ticker\",strArr[0].trim());}");
    }
}

如果上文有语法错误,则会抛出异常:

Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EvaluatorException: missing ; before statement (<Unknown source>#1) in <Unknown source> at line number 1
    at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:110)
    at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:124)
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247)
    at org.lillian.learning.App.main(App.java:11)


可以清楚的看到异常是mozilla抛出的。

Sun's implementation of JDK 6 is co-bundled with the Mozilla Rhino based JavaScriptscript engine.

你可能感兴趣的:(javax.script package)