[19/04/19-星期五] Java的动态性_脚本(Script,脚本)引擎执行JavaScript代码

一、概念

   Java脚本引擎是jdk 6.0之后的新功能。

   使得Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的。

  Java脚本API是连接Java平台和脚本语言的桥梁。

  可以把一些复杂的业务逻辑交给脚本语言处理,从而大大提高了开发效率。

【代码示例】

/***
 * 测试脚本引擎 ,就是Java和脚本语言的中介
 */
package cn.sxt.jvm;


import java.io.FileReader;

import java.net.URL;
import java.util.List;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;


public class Test_0419_JavaScript {
    public static void main(String[] args) throws Exception {
        //获取脚本引擎对象
        ScriptEngineManager sem=new ScriptEngineManager();
        ScriptEngine engine=sem.getEngineByName("javascript");//或者传个缩写 "js"
        
        // 定义变量,存储到引擎的上下文中。Java和JavaScript都可以读取到
        engine.put("msg", "Are you OK!");
        engine.eval("msg='小米手机';");//一段js代码
        System.out.println(engine.get("msg"));//用Java平台去输出,结果是"小米手机",说明msg变量修改成功了,证明
        //它可以被Java和JavaScript同时操作
        
        //一段JavaScript脚本语言代码
        String str ="var user={name:'夏洛',age:18,schools:['北京大学','清华大学']};";
        str +="print(user.name);"; //写出println(user.name); 会报错即多个ln会报错,不知道为啥?        
        //用引擎执行脚本语言代码
        engine.eval(str);//eval() 获取返回值
        
        
        //定义js函数
        engine.eval("function add(a,b) { var sum=a+b; return sum;}");
        //取得调用接口
        Invocable jsInvoke =(Invocable) engine; //Invocable可调用的
        //执行脚本中定义的add方法 ,并传入参数
        Object result =jsInvoke.invokeFunction("add", new Object[]{13,20});//激活函数
        System.out.println(result);
        
        //导入其它jar包,使用其它jar包中的Java类
        String jsCode=" var list=java.util.Arrays.asList([\"清华\",\"北大\"]);";
        engine.eval(jsCode);
        List<String> list2=(List<String>) engine.get("list");
        for (String temp : list2) {
            System.out.print(temp+" " );
        }
        
        //执行一个外部的一个js文件 getClassLoader获得类加载器 
        URL url=Test_0419_JavaScript.class.getClassLoader().getResource("add.js");
        //【注意】"add.js"的路径默认在项目的bin文件夹下(与src源码的.clss文件在一个文件夹下),而且要求项目名称是非中文。
        //js文件的默认字符是“UTF-8”,如果编译器的默认字符集是“GBK”,要注意乱码的问题!!
        FileReader fReader= new FileReader(url.getPath());
        engine.eval(fReader);
        fReader.close();
        
    }

}

 

转载于:https://www.cnblogs.com/ID-qingxin/p/10727282.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值