Java脚本引擎执行 javascript 代码
2015-08-17 10:35
696 查看
脚本引擎执行javascript代码
JAVA脚本引擎是从JDK6.0之后添加的新功能脚本引擎介绍:
使得Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的
Java脚本API是连通Java平台和脚本语言的桥梁
可以吧一些复杂异变的业务逻辑交给脚本语言去处理,这可以大大提高开发效率
获得脚本引擎对象
//获得脚本引擎对象 ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine engine = sem.getEngineByName("javascript");
代码示例:
package com.coderbean.test; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.net.URL; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class Demo01 { public static void main(String[] args) throws ScriptException, NoSuchMethodException { //获得脚本引擎对象 ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine engine = sem.getEngineByName("javascript"); //定义变量,存储的引擎上下文中,上下文的变量msg既可以被java访问也可以被脚本访问 engine.put("msg", "zhangbo is a good man"); String str = "var user = {name:'gaoqi',age:18,schools:['清华大学','杭州电子科大']};"; str += "print(user.age);"; //执行脚本 engine.eval(str); //脚本访问上下文变量 engine.eval("msg = 'HDU is a good school'"); System.out.println(engine.get("msg")); System.out.println("#####################"); //定义函数 engine.eval("function add(a,b){var sum = a+b; return sum;}"); //取得调用借口 Invocable jsInvoke = (Invocable)engine; //执行脚本中定义的方法 Object result1 = jsInvoke.invokeFunction("add", new Object[]{13,2}); System.out.println(result1); //执行一个js文件(a.js在src下) URL url = Demo01.class.getClassLoader().getResource("a.js"); try(FileReader fr = new FileReader(url.getPath())){ engine.eval(fr); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- 6. JavaScript String 对象
- 5. JavaScript Number 对象
- 4. JavaScript Math 对象
- 3. JavaScript Date 对象
- JS定时器
- javascript delete 数组长度不变
- 2. JavaScript Boolean 对象
- 1. JavaScript Array 对象
- js的方法
- D3.js中data(), enter() 和 exit()的问题详解
- js 闭包需要学习
- JSON.parse 的浏览器兼容性
- 30天了解30种技术系列---(7)不只有Echart,我们还有Char.js
- 关于js里的this关键字的理解
- jsp页面中 <%%> <%! %>, <%=%> <%-- --%>有什么区别
- Sharepoint 2013 列表使用JS Link
- js图片未加载完显示loading效果
- Javascript模块化编程(三):require.js的用法
- Javascript模块化编程(二):AMD规范
- jsp中的out对象 和 servlet中的response.getOutputStream()