ScriptEngineManager的使用说明

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.SimpleBindings;
/**
 * ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
   engine.eval(new FileReader("script.js"));
 * @author chenyuanbao
 *
 */
public class Test {
	public static void main(String[] args) throws ScriptException {
		exeVar();
		exeFor();
		exeCondition("0.01");
		exeCondition1("8","8");
		try {
			putValue();
			callJsFunction();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//java将变量导入js脚本 2的8次方
    public static void putValue() throws Exception{
        String str="Math.pow(a,b)";
        Map<String, Object>input=new TreeMap<>();
        input.put("a",2);
        input.put("b",8);
        ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("javascript");
        System.out.println(engine.eval(str,new SimpleBindings(input)));
    }
    //调用js函数
	public static void callJsFunction() throws Exception{
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("javascript");
        engine.eval("function add (a, b) {return a+b; }");
        Invocable jsInvoke = (Invocable) engine;
        Object res = jsInvoke.invokeFunction("add", new Object[] { 10, 5 });
        System.out.println(res);
	}
	public static void exeCondition1(String x,String y) throws ScriptException{
	   	List<String> conditions = new ArrayList<>();
	 	conditions.add("x==0");//如果写x=0 报错,x==0则正常。
	   	conditions.add("x>0&&y<10");
	 	conditions.add("x>=10&&y<20");
	 	conditions.add("x>=20&&y<30");
	 	ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("javascript");
		engine.put("x", x);
		engine.put("y", y);
		for(String script:conditions){
			Boolean ret  = (Boolean) engine.eval(script);
			System.out.println(script+"="+ret);
		}
	}
	
	public static void exeCondition(String val) throws ScriptException{
	   	List<String> conditions = new ArrayList<>();
	 	conditions.add("x==0");//如果写x=0 报错,x==0则正常。
	   	conditions.add("x>0&&x<1");
	 	conditions.add("x>=1&&x<2");
	 	conditions.add("x>=2&&x<3");
	 	ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("javascript");
		engine.put("x", val);
		for(String script:conditions){
			Boolean ret  = (Boolean) engine.eval(script);
			System.out.println(script+"="+ret);
		}
	}
	
	public static void exeVar() throws ScriptException{
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("javascript");
		Double hour = (Double) engine.eval("var date = new Date();" + "date.getHours();");
		System.out.println("hour : " + hour);
	}
	public static void exeFor() throws ScriptException{
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("javascript");
		engine.put("name", "abcdefg");//倒置一个字符串
		engine.eval("var output ='' ;" + "for (i = 0; i <= name.length; i++) { " + " output = name.charAt(i) + output"
				+ "}");
		String name = (String) engine.get("output");
		System.out.printf("被翻转后的字符串:%s \n", name);
	}
	//该函数测试Java与js对象
    public static void getObject() throws Exception{
        String str = "  var obj=new Object();     "
            + "  obj.info='hello world';   "
            + "  obj.getInfo=function(){   "
            + "        return this.info;   "
            + "  };                        ";
        ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("javascript");
        engine.eval(str);
        //获取对象
        ScriptObjectMirror obj=(ScriptObjectMirror) engine.get("obj");
        //输出属性
        System.out.println(obj.get("info"));
        System.out.println(obj.get("getInfo"));
        str="obj.getInfo()";
        //执行方法
        System.out.println(engine.eval(str));
    }
  //该函数测试Java获取JS变量值的能力
    public static void getJsValue() throws Exception{
        String str = "  var msg='hello';          "
            + "  var number = 123;         "
            + "  var array=['A','B','C'];  "
            + "  var json={                "
            + "      'name':'pd',          "
            + "      'subjson':{           "
            + "           'subname':'spd'  "
            + "           ,'id':123        "
            + "           }                "
            + "      };                    ";
        ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("javascript");
        //执行语句
        engine.eval(str);
        str="msg+=' world';number+=5";
        //再次执行
        engine.eval(str);
        //获取js变量msg(String类型)
        System.out.println(engine.get("msg"));
        //获取js变量msg(int类型)
        System.out.println(engine.get("number"));
        //获取js变量array(数组)
        ScriptObjectMirror array=(ScriptObjectMirror) engine.get("array");
        //getSlot(int index)函数用于获取下标为index的值
        System.out.println(array.getSlot(0));
        //获取js变量json(json类型)
        ScriptObjectMirror json=(ScriptObjectMirror) engine.get("json");
        //get(String key)函数用于键key的值
        System.out.println(json.get("name"));
        //获取js变量subjson(嵌套json类型)
        ScriptObjectMirror subjson=(ScriptObjectMirror)json.get("subjson");
        System.out.println(subjson.get("subname"));
    }
    //参考文档
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值