首页 > 技术文章 > Java 脚本引擎

xwy6 2017-07-26 17:01 原文

      脚本引擎,就是一个编程语言解释器,它的功能是解释执行用户的程序文本,将它译成计算机能执行的机器代码,完成一系列的功能。

      Java脚本引擎简单地说就是指Java提供的一组兼容操作各种脚本语言的的API。

      下面将我所了解得内容做以简单的记录,初来乍到,大神请轻喷,感谢!

      首先来个demo感受下:通过  ScriptEngineManager  对象,通过 getEngineByExtension("js")(通过扩展名,获取脚本对象);

  

public class Engine {
    
public static void main(String[] args) throws ScriptException {
        
   ScriptEngine engine = new     
               ScriptEngineManager().getEngineByExtension("js");
                    
                 if(engine==null){
                
    throw new RuntimeException("找到不JavaScript语言执行引擎");  
    }  
            
     engine.eval("var a; a = 10;print('这是JavaScript脚本引擎:'+a);");  
    }
}
      // 直接执行脚本
		engine.eval("print('我他么的热死了!')");
		System.out.println("---// 脚本语言绑定-----");
	 // 脚本语言绑定
		engine.put("name", "World");
		engine.eval("var message = 'hello,'+name;");
		engine.eval("print(message)");
		
		Object obj = engine.get("message");
		System.out.println(obj);
		System.out.println(engine.get("name"));
		
		SimpleBindings bindings = new SimpleBindings();
		bindings.put("hobby","写代码");
		engine.eval("print('I like '+ hobby);",bindings);
		
		//重定向
		ScriptContext context  = engine.getContext();
		context.setWriter(new FileWriter("aaa.txt"));
		engine.eval("print('ni hao ya wo s ni da ge dy ')");
		
		//自定义属性
		context.setAttribute("name", "王宝宝", ScriptContext.GLOBAL_SCOPE);
		context.setAttribute("name", "xiao bao bao", ScriptContext.ENGINE_SCOPE);
		System.out.println(	context.getAttribute("name"));
		
		Bindings binding = engine.createBindings();
		binding.put("key","11111"); 
		Bindings binding1 = engine.createBindings();
		binding1.put("key","222");
		
		context.setBindings(binding1, ScriptContext.GLOBAL_SCOPE);
		
		engine.eval("print(key);");
		

  


    注意:1.使用eval ()函数即可在Java代码中使用JavaScript 或其他脚本语言。

       2.Oracle Nashorn 为jdk1.8引擎版本名称。

       3.在jdk1.8环境下输出语句请使用:print();请勿使用println();否则报  javax.script.ScriptException异常!

 

//代码执行效果
Oracle Nashorn
我他么的热死了!
------脚本语言绑定-----
hello,World
hello,World
World
I like 写代码
xiao bao bao

  

 

推荐阅读