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.