博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
8.4(Java学习笔记)java脚本引擎(Rhino)
阅读量:7058 次
发布时间:2019-06-28

本文共 3418 字,大约阅读时间需要 11 分钟。

一、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 class TestRhino {    public static void main(String[] args) throws ScriptException {        //获取脚本引擎,并指定脚本语言        ScriptEngineManager sem = new ScriptEngineManager();        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对象 

 

  

import javax.script.Invocable;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;public class TestRhino {    public static void main(String[] args) throws ScriptException {        ScriptEngineManager sem = new ScriptEngineManager();        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);//执行指定的脚本文件

脚本文件内容 

 

import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.Reader;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;public class TestRhino {    public static void main(String[] args) throws ScriptException {        //E:\eclipse\Rhino        ScriptEngineManager sem = new ScriptEngineManager();        ScriptEngine engine = sem.getEngineByName("javascript");        //脚本文件路径        String path = "E:\\eclipse\\Rhino\\test.js";        Reader read = null;        try {            //通过脚本文件路径构造Reader对象            read = new FileReader(new File(path));        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        //执行脚本文件        engine.eval(read);    }}
运行结果: a+b = 7

 

转载于:https://www.cnblogs.com/huang-changfan/p/10129518.html

你可能感兴趣的文章
MFC树控件CTreeCtrl
查看>>
007——数组(七)通过回调函数得到数组交集或差集
查看>>
php中的curl的一些参数总结
查看>>
Objective-c——多线程开发第一天(pthread/NSThread)
查看>>
Linux下网站压力测试最简单好用的软件,零基础也可以搭建和使用!
查看>>
Search in Rotated Sorted Array
查看>>
box-sizing 盒模型
查看>>
独立开发 一个社交 APP 的架构分享 (已实现)
查看>>
高阶自定义View --- 粒子变幻、隧道散列、组合文字
查看>>
完全平方数(钟神的hao)
查看>>
AC日记——绿色通道 codevs 3342
查看>>
AC日记——Broken BST codeforces 797d
查看>>
ansible续集
查看>>
Azure Storage Client Library 重试策略建议
查看>>
元素分类
查看>>
页面获取当前时间
查看>>
select,poll,epoll
查看>>
关于“foreach循环”中遇到的几个问题总结
查看>>
重温JSP学习笔记--El函数库
查看>>
模板引擎ejs的include方法
查看>>