使用Java处理JavaScript

来源:互联网 发布:武昌淘宝摄影 编辑:程序博客网 时间:2024/05/16 04:43

直接上代码了,没什么好说的

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  */@Testpublic 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  */@Testpublic 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  */@Testpublic void testInvokeFunctionWithParams() throws NoSuchMethodException, ScriptException {String script = "function getName(name){return name}";String value = (String) this.processer.invokeFunction(script, "getName","jaune");assertEquals("jaune", value);}}



0 0