java rhino 下载_8.4(Java学习笔记)java脚本引擎(Rhino)
一、java腳本引擎
java腳本引擎是溝通java和腳本語句之間的橋梁,可以通過對應(yīng)的腳本引擎在java中調(diào)用各種腳本語言。
二、腳本引擎執(zhí)行腳本代碼
ScriptEngineManager:為ScriptEngine提供實例化機制。
方法:getEngineByName(String shortName);//查找并創(chuàng)建指定名稱的腳本引擎
ScriptEngine:是一個接口,該接口提供了基本的腳本功能(包括執(zhí)行腳本,設(shè)置和獲取值的方法)。
方法:get(String key);//獲取指定key所對應(yīng)的值,這里的key看做變量名稱,值看做變量名所對應(yīng)的值。
eval(String script);//執(zhí)行指定的腳本代碼
eval(Reader reader);//執(zhí)行指定的腳本文件
java執(zhí)行JavaScript腳本步驟:
1.獲取腳本引擎
2.指定腳本名稱
3.編寫腳本語句
4.執(zhí)行腳本
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);";//執(zhí)行腳本
engine.eval(str);
System.out.println("修改前的內(nèi)容:"+engine.get("msg"));
engine.eval("msg ='java';");//修改msg內(nèi)容
System.out.println("修改后的內(nèi)容:"+engine.get("msg"));
}
}
運行結(jié)果:
hcf
修改前的內(nèi)容javascript
修改后的內(nèi)容java
三、腳本引擎執(zhí)行腳本方法
1.執(zhí)行腳本方法,首先肯定是要在腳本中定義方法,然后執(zhí)行。
2.執(zhí)行時需要將engine轉(zhuǎn)換為Invcable,然后調(diào)用其中的invokeFun
Invocable:由ScriptEngines實現(xiàn)的可選接口,其方法允許調(diào)用先前已執(zhí)行的腳本中的程序(方法)。
3.調(diào)用Object invokeFunction(String name, Object... args);執(zhí)行指定方法。
name為方法名稱,args為方法參數(shù),返回是一個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;//轉(zhuǎn)換成Invocable
Object result = null;try{//執(zhí)行腳本中方法
result = invo.invokeFunction("add",new Object[]{17,23});
}catch(NoSuchMethodException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(result);
}
}
運行結(jié)果:
40.0
四、腳本引擎執(zhí)行腳本文件
1、執(zhí)行腳本文件,首先我們要指定文件的路徑。
2、通過這個路徑構(gòu)建一個Reader對象
3、調(diào)用eval(Reader reader);//執(zhí)行指定的腳本文件
腳本文件內(nèi)容
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{//通過腳本文件路徑構(gòu)造Reader對象
read = new FileReader(newFile(path));
}catch(FileNotFoundException e) {//TODO Auto-generated catch block
e.printStackTrace();
}//執(zhí)行腳本文件
engine.eval(read);
}
}
運行結(jié)果:
a+b = 7
總結(jié)
以上是生活随笔為你收集整理的java rhino 下载_8.4(Java学习笔记)java脚本引擎(Rhino)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机视觉领域的杰出人物,计算机视觉领域
- 下一篇: java开发的岗位职责,写给正在求职的J