一、java脚本引擎

java脚本引擎是沟通java和脚本语句之间的桥梁,可以通过对应的脚本引擎在java中调用各种脚本语言。

二、脚本引擎执行脚本代码

ScriptEngineManager:为ScriptEngine提供实例化机制。

方法:getEngineByName(String shortName);//查找并创建指定名称的脚本引擎

ScriptEngine:是一个接口,该接口提供了基本的脚本功能(包括执行脚本,设置和获取值的方法)。

方法:get(String key);//获取指定key所对应的值,这里的key看做变量名称,值看做变量名所对应的值。

eval(String script);//执行指定的脚本代码

eval(Reader reader);//执行指定的脚本文件

java执行JavaScript脚本步骤:

1.获取脚本引擎

2.指定脚本名称

3.编写脚本语句

4.执行脚本

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

import javax.script.ScriptException;public classTestRhino {public static voidmain(String[] args) throws ScriptException {//获取脚本引擎,并指定脚本语言

ScriptEngineManager sem = newScriptEngineManager();

ScriptEngine engine= sem.getEngineByName("javascript");//定义上下文变量,被脚本和java共享

engine.put("msg", "javascript");//定义脚本代码

String str = "var user = {name:'hcf',age:19,sex:'man'};";

str+="print(user.name);";//执行脚本

engine.eval(str);

System.out.println("修改前的内容:"+engine.get("msg"));

engine.eval("msg ='java';");//修改msg内容

System.out.println("修改后的内容:"+engine.get("msg"));

}

}

运行结果:

hcf

修改前的内容javascript

修改后的内容java

三、脚本引擎执行脚本方法

1.执行脚本方法,首先肯定是要在脚本中定义方法,然后执行。

2.执行时需要将engine转换为Invcable,然后调用其中的invokeFun

Invocable:由ScriptEngines实现的可选接口,其方法允许调用先前已执行的脚本中的程序(方法)。

3.调用Object invokeFunction(String name, Object... args);执行指定方法。

name为方法名称,args为方法参数,返回是一个Object对象

importjavax.script.Invocable;importjavax.script.ScriptEngine;importjavax.script.ScriptEngineManager;importjavax.script.ScriptException;public classTestRhino {public static void main(String[] args) throwsScriptException {

ScriptEngineManager sem= newScriptEngineManager();

ScriptEngine engine= sem.getEngineByName("javascript");//定义方法的字符串形式

String funAdd = "function add(a,b){"

+ " var sum = a + b;"

+ " return sum;"

+ " }";

engine.eval(funAdd);//这一步可以看做将方法写入脚本

Invocable invo = (Invocable)engine;//转换成Invocable

Object result = null;try{//执行脚本中方法

result = invo.invokeFunction("add",new Object[]{17,23});

}catch(NoSuchMethodException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println(result);

}

}

运行结果:

40.0

四、脚本引擎执行脚本文件

1、执行脚本文件,首先我们要指定文件的路径。

2、通过这个路径构建一个Reader对象

3、调用eval(Reader reader);//执行指定的脚本文件

脚本文件内容

importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.Reader;importjavax.script.ScriptEngine;importjavax.script.ScriptEngineManager;importjavax.script.ScriptException;public classTestRhino {public static void main(String[] args) throwsScriptException {//E:\eclipse\Rhino

ScriptEngineManager sem = newScriptEngineManager();

ScriptEngine engine= sem.getEngineByName("javascript");//脚本文件路径

String path = "E:\\eclipse\\Rhino\\test.js";

Reader read= null;try{//通过脚本文件路径构造Reader对象

read = new FileReader(newFile(path));

}catch(FileNotFoundException e) {//TODO Auto-generated catch block

e.printStackTrace();

}//执行脚本文件

engine.eval(read);

}

}

运行结果:

a+b = 7

java rhino 下载_8.4(Java学习笔记)java脚本引擎(Rhino)相关推荐

  1. JAVA不同类型数组重载_java学习笔记--java中的方法与数组

    方法 完成特定功能的代码块 方法的格式 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...){ //方法体 return 返回值: } 方法的调用方式 通过方法名调用方法 根据形 ...

  2. JDBC学习笔记——Java语言与数据库的鹊桥

    JDBC学习笔记--Java语言与数据库的鹊桥     JDBC(Java DataBase Connectivity):SUN公司提供的 一套操作数据库的标准规范,说白了就是用Java语言来操作数据 ...

  3. Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25

    Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25 目录 Rule20 接口优于抽象类 Rule21 为后代设计接口 Rule22 接口只用于定义类型 ...

  4. 学习笔记-Java并发(一)

    学习笔记-Java并发(一) 目录 学习笔记-Java并发一 目录 Executer Callable和Future 后台线程 线程加入 小计 今天看了这一篇 Java编程思想-java中的并发(一) ...

  5. Java转义工具类StringEscapeUtils的学习笔记

    Java转义工具类StringEscapeUtils的学习笔记 前言 ​ 在java.commons.lang3 的包中有许多方便好用的工具类,类似于处理字符串的StringUtils,处理日期的Da ...

  6. 深入理解Java虚拟机(第3版)学习笔记——JAVA内存区域(超详细)

    深入理解Java虚拟机(第3版)学习笔记--JAVA内存区域(超详细) 运行时数据区域 程序计数器 java虚拟机栈 本地方法栈 java堆 方法区 运行时常量池 直接内存 对象的创建 对象的内存布局 ...

  7. Spark下载和安装(学习笔记)

    夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远. 夫学须静也,才须学也,非学无以广才,非志无以成学.淫慢则不能励精,险躁则不能冶性. 年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐, ...

  8. 游戏开发学习笔记——lua脚本语言——安装、汉化与小测试(解决lua运行代码乱码问题)

    游戏开发学习笔记--lua脚本语言--安装.汉化与小测试 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: Lua 是一种轻量小巧的脚本语言,用 ...

  9. PS学习笔记------运用脚本及自动化批量处理

    PS学习笔记------运用脚本及自动化批量处理 简单脚本运行+自动批处理多图片 简单脚本运行 自动批处理图片 简单脚本运行+自动批处理多图片 本次实现的功能是: 1.运用脚本在ps中将图片的文档名称 ...

  10. 阿里云学习笔记——设置规则引擎(2)

    标题阿里云学习笔记--设置规则引擎(2) 下面是我自己作为学习笔记分享,大神勿喷,如有叙述错误的地方欢迎指正. 1.定义Topic 定义了p_data和s_data 2.创建规则引擎,这里创建了APP ...

最新文章

  1. JZOJ 2308. 【中山市选2011】聚会
  2. 为什么读博士的人越来越多?博士毕业难度不是越来越大吗?
  3. boost::fusion::hash_value用法的测试程序
  4. 新疆缺少计算机网络技术吗,新疆阿克苏职业技术学院的计算机网络技术专业好不?...
  5. 【CodeForces - 1038B 】Non-Coprime Partition (构造,数组特征)
  6. 产品经理必备的两种心态
  7. Objective-C 一些很基础的总结
  8. python编写简易超市系统_简易控制台超市销售系统|Python练习系列[1]
  9. ios swift 实现饼状图进度条,swift环形进度条
  10. Photoshop 入门教程「4」如何使用撤消命令?
  11. mysql数据库文件结构同步,[数据库的表同步mysql]MySQL表结构同步
  12. MATLAB 2020b 中文版安装教程(简洁版)
  13. 最详细最好的Multisim模拟电路仿真教程(附视频教程)
  14. hihocoder 1378(有向图求最小割集)
  15. php删除文件还能修复吗,删除文件恢复
  16. driver: linux下如何模拟按键输入和模拟鼠标
  17. CSS第六天-高级技巧(元素隐藏、精灵图、CSS用户界面样式、margi负值作用、CSS三角形)
  18. 鸿蒙系统能用wps吗,WPS Office
  19. DOSBOX运行程序
  20. Java版SLG游戏 竜退治2

热门文章

  1. 腾讯微博新浪微博相互转发工具(GreenBrowser浏览器插件)
  2. 如何使用photoshop制作GIF图片?
  3. 基于Arduino的HX711称重实验
  4. android 分析堆栈信息,分析android异常时的堆栈信息
  5. oracle11g 联机重做日志、归档日志、日志文件组以及日志文件操作
  6. 物联网居然有这么多通信协议...
  7. 下一代大数据系统和4S标准
  8. VC操作Excel之sercies、Trendline
  9. 落地广州!百度智能云开物来了
  10. python django 微信小程序商城源码