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.
本文详细介绍了如何在Java中使用javax.script API调用JavaScript方法,并通过示例展示了常见错误及其解决方法。
751

被折叠的 条评论
为什么被折叠?



