首页 > 编程语言 >Java中使用脚本引擎运行脚本语言

Java中使用脚本引擎运行脚本语言

时间:2022-11-20 18:13:05浏览次数:44  
标签:engine 脚本 Java 脚本语言 list 引擎 eval String

在Java中运行脚本语言,例如JavaScript。

步骤:

  1、创建脚本引擎管理器  ScriptEngineManager

  2、从管理器中获取一个引擎  ScriptEngine

  3、通过put(key ,value) 可以创建变量到引擎上下文中

  4、通过eval(String jscCode)   可以执行js代码

 

/**
 * 执行脚本语言,例如javascript
 */
public class TestClass {
    public static void main(String[] args) throws Exception {
        //1、创建一个脚本引擎管理器
        ScriptEngineManager sem = new ScriptEngineManager();
        //2、从工厂中拿到一个js脚本引擎
        ScriptEngine engine = sem.getEngineByName("javascript");

        //脚本内容:定义一个变量,存储到引擎上下文中
        engine.put("msg","i love you");
        //脚本内容:创建一个user类,里面三个属性,分别为字符串name,int的age,字符串数组schools。
        String str ="var user = {name:'lurenjia',age:18,schools:['家里蹲','江南皮革厂']};";
        //脚本内容:打印user类的name属性
        str += "print(user.name);";

        //执行脚本
        engine.eval(str);
        //脚本内容:修改msg
        engine.eval("msg = 'i hat you.';");
        System.out.println(engine.get("msg"));

        //脚本内容:定义add求和函数
        engine.eval("function add(a,b){var sum =a+b;return sum;};");
        //自动转型
        Invocable jsInvoke = (Invocable)engine;
        //调用指定的add方法,获取放回值。
        Object result = jsInvoke.invokeFunction("add",new Object[]{5,7});
        System.out.println(result);


        //使用java包里面的工具,例如java.util包下面的Arrays工具类。
        String jsCode = "var list = java.util.Arrays.asList([\'lurenjia\',\'caixukun\',\'aoteman\']);";
        engine.eval(jsCode);
        //获取list
        List<String> list = (List<String>) engine.get("list");
        for(String s:list){
            System.out.println("内容为:"+s);
        }

    }
}

 

标签:engine,脚本,Java,脚本语言,list,引擎,eval,String
From: https://www.cnblogs.com/lurenjia-bky/p/16909113.html

相关文章

  • JAVA接口
    JDK1.8之前接口是接口,类是类。它们是同一层次的概念。接口中没有构造器。接口如何声明:interface在JDK1.8之前,接口中只有两部分内容,(1)常量:固定修饰符:publicstaticfina......
  • JavaWeb笔记
    1.JavaEE项目的三层架构web层                    com.atguigu.web/servlet/controllerservice层         ......
  • jenkins配置从节点后运行报错java.net.ConnectException: Connection timed out: conn
    修改jenkins配置中的ip系统管理-系统配置  修改ip与访问地址相同 ......
  • JAVA学习方法与知识点
       这个时代有很多的朋友都开始选择看看学习学习当下热门的编程语言比如现在的Java这类技术。俗话说的好啊天下熙熙皆为利来,天下攘攘皆为利往,目前大多都是为了高薪工......
  • javascript: 用图片加载演示promise的应用(chrome 107.0.5304.110)
    一,js代码:<html><head><metacharset="utf-8"/><title>测试</title></head><body><imgid="img"src=""/><script>//记录开始时间leta=newDate......
  • 小新学Java9
    一、Object类1.1Object类的toString方法toStringpublicStringtoString()返回该对象的字符串表示。通常,toString方法会返回一个“以文本方式表示”此对象的字......
  • java注解
    @Override:复写、覆盖父类方法@Deprecated:方法已经过时了1、普通引入类与注解:1.1普通的引入类使用:2、注解分类2.1源码注解:只在源码中存在,编译成.class后就不存在了......
  • java将字符串和字符串数组互相转换方法
    /**java可以使用两种方法直接将字符数组转为字符串*方法1:直接在构造String时转换。char[]data={'a','b','c'};Stringstr=newString(data);*方法2:调用S......
  • JAVA多线程——线程池
    1.固定线程池:Executors.newFixedThreadPool(5);importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;/***@authorhuangdh*@......
  • java——多线程——匿名内部类方式实现线程的创建
    匿名内部类方式实现线程的创建匿名内部类方式实现线程的创建匿名:没有名字内部类:写在其他类内部的类匿名内部类作用:简化代码把子类继承父类,重写父类的方法,创......