jdk6 中的js引擎

package com.test;

import java.util.HashMap;
import java.util.Map;

import javax.script.Bindings;
import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class Test1 {

	private static ScriptEngine engine = null;
	public static final String PREFIX = "_math";
	private Map<String, String> scriptName = new HashMap<String, String>();

	//每次编译都有一个脚本引擎, 方便以后单独对某个函数进行编译
	public void compile(String functionName, String script)
			throws ScriptException {

		ScriptEngineManager engineManager = new ScriptEngineManager();
		ScriptEngine scriptEngine = engineManager.getEngineByName("js");
		ScriptEngine engineTemp = scriptEngine;
		Compilable compilable = (Compilable) engineTemp;
		CompiledScript compiledScript = compilable.compile(script);
		compiledScript.eval();
		engine.put(functionName, engineTemp.get(functionName));
		engine.eval(PREFIX + "." + functionName + "=" + functionName + ";");
	}

	private void init() {
		
		scriptName.put("add", "function add(a,b) {return a + b};");
		scriptName.put("sub", "function sub(a,b) {return a - b};");
		ScriptEngineManager engineManager = new ScriptEngineManager();
		ScriptEngine scriptEngine = engineManager.getEngineByName("js");
		engine = scriptEngine;
		try {
			engine.eval(" var " + PREFIX + " = new Object();");
			for (Map.Entry<String, String> script : scriptName.entrySet()) {
				compile(script.getKey(), script.getValue());
			}
		} catch (ScriptException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws ScriptException {

		Test1 test1 = new Test1();
		ScriptEngineManager engineManager = new ScriptEngineManager();
		ScriptEngine scriptEngine2 = engineManager.getEngineByName("js");
		test1.init();
		//使用了一个新的引擎
		scriptEngine2.put(PREFIX, engine.get(PREFIX));

		scriptEngine2.eval("print(_math.add(1,5));");
		scriptEngine2.eval("print(_math.sub(1,5));");
		test1.compile("add", "function add(a,b){return 0;}");
		scriptEngine2.eval("print(_math.add(1,5));");
		scriptEngine2.eval("print(_math.sub(1,5));");
		
		
//		Bindings bindings = scriptEngine2.getBindings(ScriptContext.ENGINE_SCOPE);
//		bindings.put("test", new Test()); 均可以将一个类对象放在引擎中,调用类中的方法
		scriptEngine2.put("test", new Test());
		scriptEngine2.eval("print(test.print('AAAA'));");
	}
	//输出结果 : 6-40-4AAAA
}

package com.test;

public class Test {
	public String print(String word) {
		return word;
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值