直接上代码了,没什么好说的
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);
}
}