• 尚学堂 215 在java中执行JavaScript代码


    package com.bjsxt.test;
    
    import java.io.FileReader;
    import java.net.URL;
    import java.util.List;
    
    import javax.script.Invocable;
    import javax.script.ScriptEngine;
    import javax.script.ScriptEngineManager;
    
    /**
     * 测试脚本引擎执行javascript代码
     * @author 尚学堂高淇 www.sxt.cn
     *
     */
    public class Demo01 {
        public static void main(String[] args) throws Exception {
            //获得脚本引擎对象
            ScriptEngineManager sem = new ScriptEngineManager();
            ScriptEngine engine = sem.getEngineByName("javascript");
            
            //定义变量,存储到引擎上下文中
            engine.put("msg", "gaoqi is a good man!");
            String str = "var user = {name:'gaoqi',age:18,schools:['清华大学','北京尚学堂']};";
            str += "println(user.name);";
            
            //执行脚本
            engine.eval(str);//输出结果gaoqi
            /*
             * 修改msg的值
             * */
            engine.eval("msg = 'sxt is a good school';");
            /*
             * 打印msg的孩子
             * */
            System.out.println(engine.get("msg"));//输出sxt is a good school
            System.out.println("###########################");
            
            //定义函数
            engine.eval("function add(a,b){var sum = a + b; return sum;}");
            //取得调用接口
            Invocable jsInvoke = (Invocable) engine;
            //执行脚本中定义的方法
            Object result1 = jsInvoke.invokeFunction("add", new Object[]{13,20});
            System.out.println(result1);//输出结果是33.0
            
            //导入其他java包,使用其他包中的java类.若需要深入了解细节,可以详细学习Rhino的语法
            /**
             * 
             * 使用java中的java类*/
            String jsCode = "importPackage(java.util); var list=Arrays.asList(["北京尚学堂","清华大学","北京大学"]);";
            engine.eval(jsCode);
            
            List<String> list2 = (List<String>)engine.get("list");
            for (String temp : list2) {
                System.out.println(temp);
            }
            
            //执行一个js文件(我们将a.js至于项目的src下即可)
            URL url = Demo01.class.getClassLoader().getResource("a.js");
            System.out.println(url.getPath());
            FileReader fr = new FileReader(url.getPath());
            engine.eval(fr);
            fr.close();   //由于只是测试,就不那么规范了。大家实际用时要使用try catch finally!
            
        }
    }

    程序的运行结果是:

    gaoqi
    sxt is a good school
    ###########################
    33.0
    北京尚学堂
    清华大学
    北京大学

  • 相关阅读:
    百度练习题 统计元音字母
    guess number
    LPTHW 结束了
    大坑
    LPTHW 笨办法学python 40章 类
    LPTHW 笨办法学python 37章 python关键字/关键词介绍
    dis进行反编译
    LPTHW 笨办法学python 33章
    eclipse安装详解以及遇到的问题
    安装eclipse错误Could not create the Java virtual machine
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/7285139.html
Copyright © 2020-2023  润新知