脚本引擎,就是一个编程语言解释器,它的功能是解释执行用户的程序文本,将它译成计算机能执行的机器代码,完成一系列的功能。

      Java脚本引擎简单地说就是指Java提供的一组兼容操作各种脚本语言的的API。

      下面将我所了解得内容做以简单的记录,初来乍到,大神请轻喷,感谢!

      首先来个demo感受下:通过  ScriptEngineManager  对象,通过 getEngineByExtension("js")(通过扩展名,获取脚本对象);

  

public class Engine {

public static void main(String[] args) throws ScriptException {

   ScriptEngine engine = new
 ScriptEngineManager().getEngineByExtension("js"); if(engine==null){ throw new RuntimeException("找到不JavaScript语言执行引擎");
} engine.eval("var a; a = 10;print('这是JavaScript脚本引擎:'+a);");
}
}
      // 直接执行脚本
engine.eval("print('我他么的热死了!')");
System.out.println("---// 脚本语言绑定-----");
 // 脚本语言绑定
engine.put("name", "World");
engine.eval("var message = 'hello,'+name;");
engine.eval("print(message)"); Object obj = engine.get("message");
System.out.println(obj);
System.out.println(engine.get("name")); SimpleBindings bindings = new SimpleBindings();
bindings.put("hobby","写代码");
engine.eval("print('I like '+ hobby);",bindings); //重定向
ScriptContext context = engine.getContext();
context.setWriter(new FileWriter("aaa.txt"));
engine.eval("print('ni hao ya wo s ni da ge dy ')"); //自定义属性
context.setAttribute("name", "王宝宝", ScriptContext.GLOBAL_SCOPE);
context.setAttribute("name", "xiao bao bao", ScriptContext.ENGINE_SCOPE);
System.out.println( context.getAttribute("name")); Bindings binding = engine.createBindings();
binding.put("key","11111");
Bindings binding1 = engine.createBindings();
binding1.put("key","222"); context.setBindings(binding1, ScriptContext.GLOBAL_SCOPE); engine.eval("print(key);");

  


    注意:1.使用eval ()函数即可在Java代码中使用JavaScript 或其他脚本语言。

       2.Oracle Nashorn 为jdk1.8引擎版本名称。

       3.在jdk1.8环境下输出语句请使用:print();请勿使用println();否则报  javax.script.ScriptException异常!

//代码执行效果
Oracle Nashorn
我他么的热死了!
------脚本语言绑定-----
hello,World
hello,World
World
I like 写代码
xiao bao bao

  

Java 脚本引擎的更多相关文章

  1. 8.4(Java学习笔记)java脚本引擎(Rhino)

    一.java脚本引擎 java脚本引擎是沟通java和脚本语句之间的桥梁,可以通过对应的脚本引擎在java中调用各种脚本语言. 二.脚本引擎执行脚本代码 ScriptEngineManager:为Sc ...

  2. java 脚本引擎执行js

    为用到时,使用方便直接保存一下代码 package com.xzlf.reflectTest; import java.io.BufferedReader; import java.io.FileIn ...

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

    一.概念 Java脚本引擎是jdk 6.0之后的新功能. 使得Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的. Java脚本API是连接Jav ...

  4. Java_脚本引擎_01_用法入门

    一.前言 最近有个需求,需要在js中调用java,这样能避免更新java,从而实现代码的热更新. 于是想到用 Nashorn JavaScript 引擎. 二.概述 通过 JDK 8 的 Nashor ...

  5. Java_脚本引擎_00_资源帖

    一.精选资料 1.w3cschool—Java 脚本引擎 2.Riding the Nashorn 二.参考资料

  6. 复杂多变场景下的Groovy脚本引擎实战

    一.前言 因为之前在项目中使用了Groovy对业务能力进行一些扩展,效果比较好,所以简单记录分享一下,这里你可以了解: 为什么选用Groovy作为脚本引擎 了解Groovy的基本原理和Java如何集成 ...

  7. Java 8 的 Nashorn 脚本引擎教程

    本文为了解所有关于 Nashorn JavaScript 引擎易于理解的代码例子. Nashorn JavaScript 引擎是Java SE 8的一部分,它与其它像Google V8 (它是Goog ...

  8. JDK8在Java转让Javascript脚本引擎动态地定义和运行代码

    import java.lang.*; import java.util.Arrays; import java.util.List; import javax.script.Invocable; i ...

  9. Java中通过脚本引擎调用js函数

    import java.io.*; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.scri ...

随机推荐

  1. ReactiveCocoa源码解析(五) SignalProtocol的observe()、Map、Filter延展实现

    上篇博客我们对Signal的基本实现以及Signal的面向协议扩展进行了介绍, 详细内容请移步于<Signal中的静态属性静态方法以及面向协议扩展>.并且聊了Signal的所有的g功能扩展 ...

  2. Linux 可重入内核

    Linux内核是可重入的,这意味着几个进程可能同时在内核模式下执行.(当然单处理器系统,在某一时间只会有一个进程执行,但许多会阻塞在内核模式)这些进程会分时共享CPU.I/O设备等系统资源,给用户的感 ...

  3. zookeeper初试

    实验环境: os-platform: windows7 x64 jdk: 1.7 参考文档: http://www.ibm.com/developerworks/cn/opensource/os-cn ...

  4. 适合初学者的一个分布式环境搭建过程(spring boot + zookeeper + dubbo + mybatis + mysql)

    本人也是才开始接触 阿里巴巴的开源分布式框架 dubbo,因为现在微服务框架 spring boot也非常的火,然后结合dubbo的官网搭建这个开发环境. 一.首先 zookeeper作为集群管理服务 ...

  5. 通用JSONHelp 的通用的封装

    1. 最近项目已经上线了 ,闲暇了几天 想将JSON  的序列化 以及反序列化进行重新的封装一下本人定义为JSONHelp,虽然Microsoft 已经做的很好了.但是我想封装一套为自己开发的项目使用 ...

  6. Spring3中@Value注解的使用

    Spring可以通过@Value注解来直接获取properties文件里面配置的值. 1. 首先要在spring的配置文件中指明properties文件的位置: <context:propert ...

  7. 十年过去了,各位 .net 兄弟还好吗

    时间是最无情的,一下子就毕业10年了.很久没有发发牢骚了,今天突然想发一下.看过我文章喷过的知道,我一般都是散文,看完不知道我写了什么,形散而神不散嘛. 十年了,不好意思,没像网上说的标准一样,做管理 ...

  8. tomcat支持php

    最近做项目遇到了问题,服务器是用的tomcat,而有用到php,就想在tomcat下面可以运行php,步骤如下: 1.下载php压缩包解压或者用wamp/xampp 我下载的是wamp,用的里面的ph ...

  9. Socket通信中的 BeginReceive与EndReceive

    BeginReceive 与endReceive 必须成对出现,如果BeginReceive没有及时调用endReceive,可能会出现数据被从buffer中读取二次,如果在下面这行代码下面加入别的代 ...

  10. elasticsearch REST API方式批量插入数据

    elasticsearch REST API方式批量插入数据 1:ES的服务地址  http://127.0.0.1:9600/_bulk 2:请求的数据体,注意数据的最后一行记得加换行 { &quo ...