java执行javascript Rhion引擎
package study; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; /** * 测试脚本引擎执行javascript代码 * * @author http://blog.csdn.net/thewaiting * */ public class test { public static void main(String[] args) throws ScriptException { // 获取脚本引擎对象 ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine engine = sem.getEngineByName("javascript"); System.out.println(); // 定义变量,存储到引擎的上下文中 engine.put("msg", "测试"); String str = "var user = {name:'Tom',age:18,schools:['学校','dd']};"; str += "print(user.name);"; // 执行脚本 try { engine.eval(str); engine.eval("msg = '测试修改'"); System.out.println(engine.get("msg")); // 定义函数 engine.eval("function add(a,b){var sum =a + b;return sum;}"); // 取得调用接口 Invocable jsInvocable = (Invocable) engine; // 执行脚本中定义的方法 Object re = jsInvocable.invokeFunction("add", new Object[] { 5, 6 }); System.out.println(re); // 导入其他的java包,使用其中的java类, /** * 脚本语言错误可以去Rhino官网学习语法 */ String jsCode = "import(java.util); var cars=new ArrayList([\"一\",\"二\",\"三\"]);"; engine.eval(jsCode); List<String> list2 = (List<String>) engine.get("cars"); for (String str1 : list2) { System.out.println(str1); } // 执行一个js文件 URL url = test.class.getClassLoader().getResource("js文件"); FileReader fr = new FileReader(url.getPath()); engine.eval(fr); fr.close(); } catch (ScriptException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }