zoukankan      html  css  js  c++  java
  • JAVA使用脚本引擎执行JS

    import java.io.File;
    import java.lang.reflect.Field;
    import java.util.Arrays;
     
    import javax.script.Invocable;
    import javax.script.ScriptEngine;
    import javax.script.ScriptEngineManager;
    import javax.script.ScriptException;
     
    public class JavaExecScriptDemo {
       
      public static void main(String[] args) {
        System.out.println(jsObjFunc());
        System.out.println(Arrays.toString(getArray()));
        System.out.println(jsCalculate("a=1+2+3+(2*2)"));
        jsFunction();
        jsVariables();
      }
     
      /**
       * 运行JS对象中的函数
       * 
       * @return
       */
      public static Object jsObjFunc() {
        String script =
            "var obj={run:function(){return 'run method : return:"abc'+this.next('test')+'"';},next:function(str){return ' 我来至next function '+str+')'}}";
        ScriptEngineManager sem = new ScriptEngineManager();
        ScriptEngine scriptEngine = sem.getEngineByName("js");
        try {
          scriptEngine.eval(script);
          Object object = scriptEngine.get("obj");
          Invocable inv2 = (Invocable) scriptEngine;
          return (String) inv2.invokeMethod(object, "run");
        } catch (Exception e) {
          e.printStackTrace();
        }
        return null;
      }
     
      /**
       * 获取js对象数字类型属性
       * 
       * @return
       */
      public static Object[] getArray() {
        ScriptEngineManager sem = new ScriptEngineManager();
        String script = "var obj={array:['test',true,1,1.0,2.11111]}";
     
        ScriptEngine scriptEngine = sem.getEngineByName("js");
        try {
          scriptEngine.eval(script);
          Object object2 = scriptEngine.eval("obj.array");
          Class<!--?--> clazz = object2.getClass();
          Field denseField = clazz.getDeclaredField("dense");
          denseField.setAccessible(true);
          return (Object[]) denseField.get(object2);
        } catch (Exception e) {
          e.printStackTrace();
        }
        return null;
      }
     
      /**
       * JS计算
       * 
       * @param script
       * @return
       */
      public static Object jsCalculate(String script) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("javascript");
        try {
          return (Object) engine.eval(script);
        } catch (ScriptException ex) {
          ex.printStackTrace();
        }
        return null;
      }
     
      /**
       * 运行JS基本函数
       */
      public static void jsFunction() {
        ScriptEngineManager sem = new ScriptEngineManager();
        ScriptEngine se = sem.getEngineByName("javascript");
        try {
          String script = "function say(name){ return 'hello,'+name; }";
          se.eval(script);
          Invocable inv2 = (Invocable) se;
          String res = (String) inv2.invokeFunction("say", "test");
          System.out.println(res);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
     
      /**
       * JS中变量使用
       */
      public static void jsVariables() {
        ScriptEngineManager sem = new ScriptEngineManager();
        ScriptEngine engine = sem.getEngineByName("javascript");
        File file = new File("/data/js.txt");
        engine.put("file", file);
        try {
          engine.eval("println('path:'+file.getAbsoluteFile())");
        } catch (ScriptException e) {
          e.printStackTrace();
        }
     
      }
    }
  • 相关阅读:
    在金融服务计算中,必须要使用BigDecimal
    互联网发展的三个阶段
    k3 cloud服务器端安装顺序
    k3 cloud修改数据库密码后无法连接管理中心
    K3 CLOUD提示库存键重复,提示如下
    k3 cloud总账凭证提示冲突,清除冲突并且第二天开机以后依然提示
    k3 cloud注册插件的时候提示,请选择一个有效的插件程序集
    k3 cloud付款单提示余额不足,科目余额表中余额为正,银行存款流水账中未负数
    k3 cloud提示超出产品激活有效期
    k3 cloud在站点中新增用户
  • 原文地址:https://www.cnblogs.com/maydow/p/4781823.html
Copyright © 2011-2022 走看看