TA的每日心情 | 开心 2021-3-12 23:18 |
|---|
签到天数: 2 天 [LV.1]初来乍到
|
|
本例子使用了JDK 1.6以上的javax.script包,通过Invocable接口实现JAVA调用JS脚本里的方法,本例中调用分为内部执行脚本和外部执行脚本,外部执行脚本分为不带参数调用和带参数调用。主要采用invokeFunction方法调用:
- import javax.script.Invocable;
- import javax.script.ScriptEngineManager;
- import javax.script.ScriptEngine;
- import java.io.File;
- import java.io.Reader;
- import java.io.FileReader;
- public class AjavaInvokingFunction {
- public static void main(String[] args) {
- // 获得一个JavaScript脚本引擎,也可以是ECMAScript脚本引擎
- ScriptEngineManager manager = new ScriptEngineManager();
- ScriptEngine engine = manager.getEngineByName("JavaScript");
- String titlescript = "function sayTitle() {"
- + " println("使用javax.script调用JS脚本里的方法");"
- + " println("--------------------------------------------------");"
- + "}";
- try {
- // 调用内部脚本执行-----------------------------------------
- engine.eval(titlescript);
- // 转换为Invocable
- Invocable invocableEngine = (Invocable) engine;
- // 不带参数调用sayTitle方法
- invocableEngine.invokeFunction("sayTitle");
- // 调用外部脚本执行------------------------------------------
- // 创建JS文件的File对象,并读入流
- File functionscript = new File("ajava.js");
- Reader reader = new FileReader(functionscript);
- // 开始执行ajava.js里的程序
- engine.eval(reader);
- // 不带参数调用sayHello方法
- invocableEngine.invokeFunction("sayHello");
- // 带参数调用sayHello方法
- invocableEngine.invokeFunction("sayHello", "mark");
- } catch (Exception e){
- e.printStackTrace();
- }
- }
- }
- js文件:
- function sayHello(){
- sayHello(null);
- }
- function sayHello(name){
- if(name==null){
- println("欢迎你!请注册java会员");
- }else{
- println(name+",独立JAVA社区欢迎你");
- }
- }
复制代码 运行:
C:ex>java AjavaInvokingFunction
使用javax.script调用JS脚本里的方法
--------------------------------------------------
欢迎你!请注册java会员
mark,独立JAVA社区欢迎你
源码下载:http://file.javaxxz.com/2014/11/3/000157000.zip |
|