码迷,mamicode.com
首页 > 编程语言 > 详细

使用Java处理JavaScript

时间:2015-01-23 18:19:36      阅读:192      评论:0      收藏:0      [点我收藏+]

标签: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);
	}

}



使用Java处理JavaScript

标签:java   javascript   

原文地址:http://blog.csdn.net/jaune161/article/details/43058785

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!