基于mozilla的js.jar包定义javascript的解析ScriptTool脚本工具类实现执...
package test;import java.io.IOException;import java.util.HashMap;import java.util.Map;import org.mozilla.javascript.Context;import org.mozilla.javascript.Function;import org.mozilla.javascript.Scriptable;public class ScriptTool { /** * @see 执行js函数,返回js函数执行结果 * @param jsFile * @param funName * @param args * @return */ public static Object callFunction(String jsFile,String funName,Object[] args){ String jsPath = jsFile; String jsFunction = funName; Object result=null; Context cx = Context.enter(); java.io.FileReader fr = null; try { Scriptable scope = cx.initStandardObjects(); fr = new java.io.FileReader(jsPath); cx.evaluateReader(scope, fr, '<cmd>', 1, null); Object fObj = scope.get(jsFunction, scope); if (!(fObj instanceof Function)) { System.out.println('Function not found' +jsFunction); } else { Function f = (Function)fObj; result = f.call(cx, scope, scope, args); System.out.println('return:'+Context.toString(result)); } } catch(Exception e){ e.printStackTrace(); } finally { Context.exit(); if(fr != null) try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } return result; } /** * @see 执行出入的js串,返回变量值Map * @param jString * @param varNames 返回map中变量名称 * @return Map 变量值 */ public static Map eval(String jString,String[] varNames){ Map result=new HashMap(); Context cx = Context.enter(); try { Scriptable scope = cx.initStandardObjects(); cx.evaluateString(scope, jString, '<cmd>', 1, null); for(int i=0;i<varNames.length;i++){ result.put(varNames[i],scope.get(varNames[i], scope)); } } catch(Exception e){ e.printStackTrace(); } finally { Context.exit(); } return result; } public static void main(String[] args) { try { //执行js函数 String jsFile='c:\\temp\\mactest.js'; String funName='mactest'; Object[] arges={'m1','m2'}; Object result=ScriptTool.callFunction(jsFile, funName, arges); System.out.println(result); //执行js脚本 StringBuffer jString=new StringBuffer(); jString.append('var i=1;'); jString.append('var j=2;'); jString.append('var c=(i+j)*100;'); Map varsMap=ScriptTool.eval(jString.toString(),new String[]{'i','j','c'}); System.out.println(varsMap); } catch (Exception e) { e.printStackTrace(); } }} 赞 (0)
