Java ScriptEngine 解析js

1、脚本引擎

① 通过脚本名称获取: 
     ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); 

pasting

  1. ScriptEngineManager manager = new ScriptEngineManager();
  2. ScriptEngine engine = manager.getEngineByName("JavaScript");
2、方法调用 
    Java虚拟机支持脚本的意义在于实现函数式的编程,即脚本中最重要的便是方法。一些脚本引擎允许使用者单独调用脚本中的某个方法,支持此操作的脚本引擎可以通过实现javax.script.Invocable接口,支持顶层方法或者某对象中成员方法的调用。使用方法调用时最好先检查脚本引擎是否实现了Invocable接口,JavaSE中的JavaScript引擎已实现了Invocable接口。 

① 在Java中调用脚本中的顶层方法

[java] view plain copy
  1. public void invokeFunction() throws ScriptException, NoSuchMethodException {
  2. ScriptEngine engine = getJavaScriptEngine();
  3. String scriptText = "function greet(name) { println('Hello, ' + name); } ";
  4. engine.eval(scriptText);
  5. Invocable invocable = (Invocable) engine;
  6. invocable.invokeFunction("greet", "Alex");
  7. }

3、示例代码

 Reader scriptReader = null ;
        try {
            String configFileRootDir = System.getProperty("configFileRootDir") ;
            if(StringUtils.isNotBlank(configFileRootDir)){
                File jsFile = new File(configFileRootDir+File.separator+"collectscript"+File.separator+scriptFileName);
                LOGGER.debug("scriptReader jsFile.getAbsolutePath(): "+jsFile.getAbsolutePath());
                scriptReader = new InputStreamReader(new FileInputStream(jsFile)) ;
            }else{
                scriptReader = new InputStreamReader(JavaScriptJMXUtil.class.getClassLoader().getResourceAsStream("collectscript/" + scriptFileName));
            }
            ScriptEngineManager manager = new ScriptEngineManager() ;
            ScriptEngine engine = manager.getEngineByName("JavaScript");
            engine.eval(scriptReader) ;
            if(engine instanceof Invocable){
                Invocable invEngine = (Invocable)engine ;
                Map<String,Object> resultMap = (HashMap)invEngine.invokeFunction("collectEntranceFunction",kpiArray,jmx_hostname,jmx_port,jmx_username,jmx_pwd,mBeanUri);
                }
                return resultMap ;
            }

  被调用的 test.js 文件

var logger = org.slf4j.LoggerFactory.getLogger("jmx_activemq_kpitemp.js");
var util = new com.ai.toptea.jmx.monitor.javascript.platform.CassandraPlatformUtil();  //java 类实现公共方法
function collectEntranceFunction(kpiArray,jmx_hostname,jmx_port,jmx_username,jmx_pwd) {
    logger.info("execute jmx_activemq_kpitemp.js...");
    var msc = util.initMBeanServerConnAndReturn(jmx_hostname,jmx_port,jmx_username,jmx_pwd);
    var resultMap = new java.util.HashMap();
    for(var i=0 ; i<kpiArray.length ; i++ ){
        resultMap.put(kpiArray[i],this[kpiArray[i]](msc));
    }
    util.closeJMXConnector();//关闭JMXConnector连接
    logger.info("execute jmx_activemq_kpitemp.js completed.");
    return resultMap;
}

Java ScriptEngine 解析js的更多相关文章

  1. Atitit。Tree文件解析器的原理流程与设计实现  java  c# php js

    Atitit.Tree文件解析器的原理流程与设计实现  java  c# php js 1. 解析原理与流程1 1.1. 判断目录  ,表示服  dirFlagChar = "└├─&quo ...

  2. 6.游戏特别离不开脚本(3)-JS脚本操作java(2)(直接解析JS公式,并非完整JS文件或者函数)

    在游戏中可以考虑数据由javabean保存,逻辑方法由JS提供. public class Bean4JS { private int id; private String name; private ...

  3. java中调用js脚本

    JDK1.6加入了对Script(JSR223)的支持.这是一个脚本框架,提供了让脚本语言来访问Java内部的方法.你可以在运行的时候找到脚本引擎,然后调用这个引擎去执行脚本.这个脚本API允许你为脚 ...

  4. 浅解析js中的对象

    浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...

  5. paip.java 以及JavaScript (js) 的关系以及区别

    paip.java 以及JavaScript (js) 的关系以及区别 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...

  6. 在Java中执行js代码

    在某些特定场景下,我们需要用Java来执行Js代码(如模拟登录时,密码被JS加密了的情况),操作如下: ScriptEngineManager mgr = new ScriptEngineManage ...

  7. java中执行js代码

    要在java中执行js代码,首先明白,java不支持浏览器本身的方法.支持自定义的js方法,否则会报错 先新建一个js文件:jsss.js 内容如下: function aa(a,b){ return ...

  8. C# 解析js方法,并调用js方法

    本文转载:http://www.cnblogs.com/StudyLife/archive/2013/03/11/2953516.html 本文不是基于B/S的 后台调用前台js方法,而是给你一段js ...

  9. java ScriptEngine 使用

    Java SE 6最引人注目的新功能之一就是内嵌了脚本支持.在默认情况下,Java SE 6只支持JavaScript,但这并不以为着Java SE 6只能支持JavaScript.在Java SE ...

随机推荐

  1. js 判断浏览器类型及版本

    1.思路: 能力检测 + 字符串检索 2.例子 IE    Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)      ActiveXObject函 ...

  2. R语言画图小结

    本文以1950年到2010年期间我国的火灾统计数据为例,数据如下所示: (0)加载数据 data<-read.csv("E:\\MyDocument\\p\\Data\\1950~20 ...

  3. hdu1564博弈+找规律

    #include<map> #include<set> #include<cmath> #include<queue> #include<stac ...

  4. 手把手教你如何加入到github的开源世界

    我曾经一直想加入到开源项目中,但是因为没有人指导流程,网上看了很多,基本都是说了个大概,如果你也是一个初出茅庐的人,那么,我将以自己提交的一次开源代码为例,教会你步入开源的世界. 1,首先登陆到htt ...

  5. JAVA中的>>和>>>号以及<<号的作用

    public static void main(String[] args) { //右移2位,输出结果为2.二进制1000右移2位变为0010 System.out.println(8>> ...

  6. Linux 的 Out-of-Memory (OOM) Killer

    同事在 Linux 服务器上遇到点小问题,我也上去折腾半天.这还是第一次注意到 Linux 这个多年来就存在的特性:OOM Killer .说白了 OOM Killer 就是一层保护机制,用于避免 L ...

  7. 终于知道为什么我的mysql总是卸载的不干净以及老是找不到my.ini文件

    感谢博主: http://blog.sina.com.cn/s/blog_6fc5bfa90100qmr9.html 如果你的电脑里装过MySQL,想再重新安装MySQL的时候可能就会因为前一版本卸载 ...

  8. windows下搭建svn服务器及权限配置

    服务器端VISUALSVN SERVER 3.3.1 下载地址 https://www.visualsvn.com/server/download/ 客户端TortoiseSVN 1.8.13下载地址 ...

  9. PHP ksort() 函数

    PHP ksort() 函数 PHP Array 函数 实例 按照键名对关联数组进行升序排序: <?php $age=array("Bill"=>"60&qu ...

  10. Kotlin Reference (九) Properties and Fields

    most from reference 声明属性 Koltin的类都有属性,这些属性可以声明为可变的,使用var关键字或用val关键字生声明不可变属性. class Address { var nam ...