资讯专栏INFORMATION COLUMN

Java动态性(3) - 脚本引擎执行javascript代码

dendoink / 3339人阅读

摘要:脚本引擎执行代码脚本引擎介绍使得应用程序可以通过一套固定的接口与各种脚本引擎交互从而达到在平台上调用各种脚本语言的目的脚本是连通平台和脚本语言的桥梁可以吧一些复杂异变的业务逻辑交给脚本语言处理这又大大提高了开发效率获得脚本引擎对象脚本为开发

1.脚本引擎执行JavaScript代码

脚本引擎介绍

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

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

可以吧一些复杂异变的业务逻辑交给脚本语言处理,这又大大提高了开发效率

获得脚本引擎对象

ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");

Java脚本API为开发者提供了如下功能:

获取脚本程序输入,通过脚本引擎运行脚本并返回运行结果,这是最核心的接口

注意是:接口 Java可以使用各种不同的实现,从而通用的调用js,groovy,python等脚本

Rhino是一种使用Java语言写的JavaScript的开源实现,原先由Mozilla开发,现在被集成进入JDK6.0以及以上版本

通过脚本引擎的运行上下文在脚本和Java平台间交换数据

通过Java应用程序调用函数脚本

a.js

function test(){
    var a = 3;
    var b = 4;
    print("invoke js file:"+(a+b));   
}
test();
import java.io.FileReader;
import java.net.URL;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class JavaScript {

    public static void main(String[] args) throws Exception {
       
        //获得脚本引擎对象
        ScriptEngineManager sem = new ScriptEngineManager();
        ScriptEngine engine = sem.getEngineByName("javascript");
        
        //定义变量,存储在引擎上下文中
        engine.put("msg", "I am a good man!");
        
        String str = "var user = {name:"Matrix42",age:18,schools:["清华大学","北京大学"]};";
        
        str+= "print(user.name);";
        
        engine.eval(str);
        
        engine.eval("msg = "Ha Ha";");
        
        System.out.println(engine.get("msg"));
        
        //定义函数
        engine.eval("function add(a,b){var sum = a + b; return sum;}");
        
        //取得调用接口
        Invocable jsInvocable = (Invocable) engine;
        
        //执行脚本中定义的方法
        Object result = jsInvocable.invokeFunction("add", new Object[]{13,20});
        
        System.out.println(result);
        
        //导入其他java包,使用其他包中的java类,如果想要深入了解可以学习Rhino
        //查资料说jdk8好像不支持,jdk7支持
        //- If you need JavaScript, use Java 7. 
        //- If you need Java 8, don"t use JavaScript. 
        /*String jsCode = "importPackage(java.util);var list=Arrays.asList(["北京大学","清华大学"]);";
        
        engine.eval(jsCode);
        
        List list = (List) engine.get("list");
        
        for(String string:list){
            System.out.println(string);
        }*/
        
        //执行一个js文件(将js放到src下即可)
        URL url = JavaScript.class.getClassLoader().getResource("a.js");
        FileReader fr = new FileReader(url.getPath());
        engine.eval(fr);
        fr.close();
    }

}
2.Rhino介绍

Rhino是一种使用java语言编写的JavaScript的开源实现,原先由Mozilla开发,现在被集成进入JDK6.0

官方首页:https://developer.mozilla.org...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71944.html

相关文章

  • Java知识点总结(动态执行JS代码

    摘要:知识点总结动态执行代码知识点总结动态字节码操作之后提供了脚本引擎功能,让我们可以执行某些脚本语言,特别是是一门解释性语言,动态性非常好。脚本为开发者提供了如下功能获取脚本程序输入,通过脚本引擎运行脚本并返回运行结果,这是最核心的接口。 Java知识点总结(动态执行JS代码 ) @(Java知识点总结)[Java, 动态字节码操作] JDK6.0之后提供了脚本引擎功能,让我们可以执行某些...

    qieangel2013 评论0 收藏0
  • Java知识点总结(动态执行JS代码

    摘要:知识点总结动态执行代码知识点总结动态字节码操作之后提供了脚本引擎功能,让我们可以执行某些脚本语言,特别是是一门解释性语言,动态性非常好。脚本为开发者提供了如下功能获取脚本程序输入,通过脚本引擎运行脚本并返回运行结果,这是最核心的接口。 Java知识点总结(动态执行JS代码 ) @(Java知识点总结)[Java, 动态字节码操作] JDK6.0之后提供了脚本引擎功能,让我们可以执行某些...

    forsigner 评论0 收藏0
  • [译] Java 8 Nashorn 教程

    摘要:未来的主要发布基于。在中调用函数支持从代码中直接调用定义在脚本文件中的函数。下面的函数稍后会在端调用为了调用函数,你首先需要将脚本引擎转换为。调用函数将结果输出到,所以我们会首先看到输出。幸运的是,有一套补救措施。 原文:Java 8 Nashorn Tutorial 译者:飞龙 协议:CC BY-NC-SA 4.0 这个教程中,你会通过简单易懂的代码示例,来了解Nashorn Ja...

    _ivan 评论0 收藏0
  • JavaScriptCore全面解析

    摘要:可嵌入动态文本于页面,对浏览器事件作出响应,读写元素,控制等。年月,发布了一款面向普通用户的新一代的浏览器版,市场份额一举超过。网景将这门语言作为标准提交给了欧洲计算机制造协会。线程和的并发执行都是线程安全的。后面会详细讲解对象类型的转换。 本文由云+社区发表作者:殷源,专注移动客户端开发,微软Imagine Cup中国区特等奖获得者 JavaScript越来越多地出现在我们客户端开...

    OnlyMyRailgun 评论0 收藏0
  • 一个后端开发者的前端语言基础:JavaScript

    摘要:一基本概述概述一种直译式脚本语言,是一种动态类型弱类型基于原型的语言,内置支持类型。 JavaScript (一) 基本概述 (1) 概述 JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给H...

    ephererid 评论0 收藏0

发表评论

0条评论

dendoink

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<