使用Java处理JavaScript

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jaune161/article/details/43058785

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

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

}



转载于:https://my.oschina.net/jaune161/blog/3015864

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值