使用Java处理JavaScript

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

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);
	}

}



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。