直接上代码了,没什么好说的
package com.tiamaes.gjds.script; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; /** * <p>类描述: javascript处理器 </p> * <p>创建人:王成委 </p> * <p>创建时间:2015年1月22日 上午11:16:08 </p> * <p>版权说明: © 2015 Tiamaes </p> */ public class JavascriptProcesser { private static ScriptEngine scriptEngine; private static final String MEDIA_TYPE = "application/javascript"; /** * <p>方法描述:获取javascript引擎管理器</p> * <p>创建人: 王成委 </p> * <p>创建时间: 2015年1月10日 上午10:50:06 </p> * @param createNew * @return */ public ScriptEngine getScriptEngineManager(boolean createNew){ if(createNew){ ScriptEngineManager mgr = new ScriptEngineManager(); return mgr.getEngineByMimeType(MEDIA_TYPE); }else if(scriptEngine == null){ ScriptEngineManager mgr = new ScriptEngineManager(); scriptEngine = mgr.getEngineByMimeType(MEDIA_TYPE); } return scriptEngine; } /** * <p>方法描述:从javascript中获取变量的值</p> * <p>创建人: 王成委 </p> * <p>创建时间: 2015年1月10日 上午10:50:06 </p> * @param script * @param varName * @return * @throws ScriptException */ public Object getByVariableName(String script,String varName) throws ScriptException{ ScriptEngine scriptEngine = this.getScriptEngineManager(true); scriptEngine.eval(script); return scriptEngine.get(varName); } /** * <p>方法描述:执行javascript方法</p> * <p>创建人: 王成委 </p> * <p>创建时间: 2015年1月10日 上午10:50:06 </p> * @param script * @param funName * @param params * @return * @throws ScriptException * @throws NoSuchMethodException */ public Object invokeFunction(String script,String funName,Object...params) throws ScriptException, NoSuchMethodException{ ScriptEngine scriptEngine = this.getScriptEngineManager(true); scriptEngine.eval(script); Invocable inv = (Invocable) scriptEngine; Object obj = inv.invokeFunction(funName,params); return obj; } /** * <p>方法描述:获取js引擎</p> * <p>创建人: 王成委 </p> * <p>创建时间: 2015年1月10日 上午10:50:06 </p> * @param script * @return * @throws ScriptException */ public ScriptEngine getScriptEngine(String script) throws ScriptException{ ScriptEngine scriptEngine = this.getScriptEngineManager(true); scriptEngine.eval(script); return scriptEngine; } }
测试方法
package com.tiamaes.gjds.script; import static org.junit.Assert.*; import javax.script.ScriptException; import org.junit.Test; /** * <p>类描述: 测试 JavascriptProcesser,仅测试{@link JavascriptProcesser#getByVariableName(String, String)} * 和{@link JavascriptProcesser#invokeFunction(String, String, Object...)}</p> * <p>创建人:王成委 </p> * <p>创建时间:2015年1月23日 下午5:50:10 </p> * <p>版权说明: © 2015 Tiamaes </p> */ public class JavascriptProcesserTest { JavascriptProcesser processer = new JavascriptProcesser(); /** * Test method for {@link com.tiamaes.gjds.script.JavascriptProcesser#getByVariableName(java.lang.String, java.lang.String)}. * @throws ScriptException */ @Test public void testGetByVariableName() throws ScriptException { String script = "var name='jaune'"; String value = (String) this.processer.getByVariableName(script, "name"); assertEquals("jaune", value); } /** * Test method for {@link com.tiamaes.gjds.script.JavascriptProcesser#invokeFunction(java.lang.String, java.lang.String, java.lang.Object[])}. * @throws ScriptException * @throws NoSuchMethodException */ @Test public void testInvokeFunction() throws NoSuchMethodException, ScriptException { String script = "function getName(){return 'jaune'}"; String value = (String) this.processer.invokeFunction(script, "getName"); assertEquals("jaune", value); } /** * Test method for {@link com.tiamaes.gjds.script.JavascriptProcesser#invokeFunction(java.lang.String, java.lang.String, java.lang.Object[])}. * @throws ScriptException * @throws NoSuchMethodException */ @Test public void testInvokeFunctionWithParams() throws NoSuchMethodException, ScriptException { String script = "function getName(name){return name}"; String value = (String) this.processer.invokeFunction(script, "getName","jaune"); assertEquals("jaune", value); } }
时间: 2024-10-11 14:04:59