java调用javascript

java调用javascript

package com.efun.tools;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

/**
 * javascript工具类,用于调用js方法
 * 
 * @author leng
 * @since jdk1.6
 * 
 */
public class JavaScriptUtil {
	public static void main(String[] args) throws ScriptException,
			NoSuchMethodException {
		 ScriptEngineManager manager = new ScriptEngineManager();
		 ScriptEngine engine = manager.getEngineByName("javascript");
		 try {
		
		 Double result = (Double) engine
		 .eval("var a=3; var b=44; c=a+b;f=a-b; ");
		
		 // engine.getContext().getScopes()
		 System.out.println(engine.getContext().getAttribute("a"));
		 engine.get("c");
		 System.out.println(engine.get("c"));
		 System.out.println(result);
		 // engine.eval("alert(\"js alert\");"); // 不能调用浏览器中定义的js函数 //
		 // 错误,会抛出alert引用不存在的异常
		
		 } catch (ScriptException e) {
		
		 e.printStackTrace();
		 }

		 String jsCode = "function test123(a,b){ return a+b}";
		 System.out.println(jsCalculateFunction(jsCode, "test123", 1, 2));
		

//		 String jsCode="c=a+b;f=a-b;";
//		 
//		 String aaa="c=(a*b)+(2*(a+1))/3";
//		 Map m=new HashMap();
//		 m.put("a", 1);
//		 m.put("b", 3);
//		 ScriptEngine engine=jsCalculate(jsCode, m);
//		 System.out.println(engine.get("a"));
//		 System.out.println(engine.get("b"));
//		 System.out.println(engine.get("c"));
//		 System.out.println(engine.get("f"));
//		 System.out.println(engine.get("g"));
		
		System.out.println(encodeURIComponent("test asd"));

	}

	/**
	 * 使用指定的js代码,计算结果
	 * 
	 * @param jsCode
	 *            js代码
	 * @param functionName
	 *            需要调用的功能名
	 * @param params
	 *            参数
	 * @return
	 * @throws ScriptException
	 * @throws NoSuchMethodException
	 */
	public static Object jsCalculateFunction(String jsCode,
			String functionName, Object... params) throws ScriptException,
			NoSuchMethodException {
		Object result = null;
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("javascript");
		engine.eval(jsCode);
		if (engine instanceof Invocable) {
			Invocable invoke = (Invocable) engine; // 调用merge方法,并传入两个参数
			Object obj = invoke.invokeFunction(functionName, params);
			return obj;
		}
		return result;
	}

	/**
	 * 调用js的encodeURIComponent方法
	 * @param str  需要encode的内容
	 * @return  编码后的内容
	 * @throws ScriptException
	 */
	public static String encodeURIComponent(String str) throws ScriptException{
		String jsCode="result=encodeURIComponent(str)";
		Map m=new HashMap();
		m.put("str",str);
		ScriptEngine engine=jsCalculate(jsCode,m);
		String result=(String) engine.get("result");
		return result;
	}
	
	/**
	 * 执行js代码,需要从ScriptEngine内自行获取结果
	 * 
	 * @param jsCode
	 *            js代码
	 * @param params
	 *            参数
	 * @return
	 * @throws ScriptException
	 */
	public static ScriptEngine jsCalculate(String jsCode,
			Map<String, Object> params) throws ScriptException {
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("javascript");

		if (null != params && params.size() > 0) {
			Set<Entry<String, Object>> set = params.entrySet();
			Iterator<Entry<String, Object>> it = set.iterator();

			while (it.hasNext()) {
				Entry<String, Object> e = it.next();
				String key = e.getKey();
				Object valueObj = e.getValue();
				engine.put(key, valueObj);
			}
		}
		engine.eval(jsCode);
		return engine;
	}
	

	public static ScriptEngine getScripteEngine() throws ScriptException {
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("javascript");
		return engine;
	} 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值