rhino的使用

先说下rhino的简单使用:

  • 官网下载rhino
  • 解压
  • 进入有js.jar的目录,在控制台执行java -jar js.jar,会出现带提示符js>的命令行解释器,新建一个可执行的js文本如下:

    1
    2
    3
    4
    var tools = {}; 
    tools.testproduct = function(num1 , num2){
    return num1 * num2;
    }
  • 加载上述js,在命令提示符后输入:load(“D:/tools.js”)

  • 接下来就可在上述命令行执行tools.testproduct(2,4);

Java与JavaScript的相互调用
这一部分是我们最想要的功能,利用这我们可以写出不需要重新启动服务器就可调试的代码,具有很大的灵活性:

  • 在Js中使用Java,先看这样的一段代码:在js中可以直接使用java对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public static void main(String[] args)   
    {
    Context cx = Context.enter(); //创建上下文环境
    try
    {
    Scriptable scope = cx.initStandardObjects();//初始化标准对象
    Object out = Context.javaToJS(System.out, scope);//将System.out内置
    ScriptableObject.putProperty(scope, "out", out);//设别名为out
    cx.evaluateString(scope, "out.println('Successful!')", null, 1, null);
    //执行命令
    }
    finally
    {
    Context.exit();//退出js环境
    }
    }
  • 在java中使用js代码:这一部分可以用来获得javascript执行中的一些临时信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class MathEval   
    {
    public static void main(String[] args)
    {
    Context cx = Context.enter();
    try
    {
    Scriptable scope = cx.initStandardObjects();
    cx.evaluateString(scope, "var test ;", null, 1, null);
    Object jsObject = scope.get("test" , scope);
    if (jsObject == Scriptable.NOT_FOUND) {
    System.out.println("test is not defined.");
    } else {
    System.out.println("test is " + Context.toString(jsObject));
    }
    }
    finally
    {
    Context.exit();
    }
    }
    }
  • 在java中调用javascript脚本中的函数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public class MathEval   
    {
    public static void main(String[] args)
    {
    Context cx = Context.enter();
    try
    {
    Scriptable scope = cx.initStandardObjects();
    cx.evaluateString(scope,
    "function test(name){return 'Successful!' + name;}", null, 1, null);
    Object functionObject = scope.get("test" , scope);
    if (!(functionObject instanceof Function)) {
    System.out.println("test is undefined or not a function.");
    } else {
    Object testArgs[] = {"Ceven"};
    Function test = (Function)functionObject;
    Object result = test.call(cx, scope, scope, testArgs);
    System.out.println(Context.toString(result));
    }
    }
    finally
    {
    Context.exit();
    }
    }
    }
Leo wechat
欢迎订阅公众号,建设中!