java和js之间互相调用实践(一)

package com.wawmg.js;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class HelloScriptingWorld {
public static void main(String[] args) throws ScriptException,
  NoSuchMethodException {

 ScriptEngineManager scriptEngineMgr = new ScriptEngineManager();
 ScriptEngine jsEngine = scriptEngineMgr.getEngineByName("JavaScript");

 if (jsEngine == null) {
  System.err.println("No script engine found for JavaScript");
  System.exit(1);
 }
//用script引擎执行js代码
 System.out.println("Calling invokeHelloScript...");
 invokeHelloScript(jsEngine);
//用script引擎定义js函数
 System.out.println("\nCalling defineScriptFunction...");
 defineScriptFunction(jsEngine);
 //用script引擎调用已经定义的js函数
 System.out.println("\nCalling invokeScriptFunctionFromEngine...");
 invokeScriptFunctionFromEngine(jsEngine);
 //使用java接口调用js函数
 System.out.println("\nCalling invokeScriptFunctionFromJava...");
 invokeScriptFunctionFromJava(jsEngine);
 //script引擎中put java实例,在script中通过java实例调用java方法
 System.out.println("\nCalling invokeJavaFromScriptFunction...");
  invokeJavaFromScriptFunction(jsEngine);
}

private static void invokeHelloScript(ScriptEngine jsEngine)
  throws ScriptException {
 jsEngine.eval("println('Hello from JavaScript')");
}

private static void defineScriptFunction(ScriptEngine engine)
  throws ScriptException {
 // Define a function in the script engine
 engine.eval("function sayHello(name) {" + " println('Hello, ' + name)"
   + "}");
}

private static void invokeScriptFunctionFromEngine(ScriptEngine engine)
  throws ScriptException {
 engine.eval("sayHello('World!')");
}

private static void invokeScriptFunctionFromJava(ScriptEngine engine)
  throws ScriptException, NoSuchMethodException {
 Invocable invocableEngine = (Invocable) engine;
 invocableEngine.invokeFunction("sayHello", "from Java");
}

private static void invokeJavaFromScriptFunction(ScriptEngine engine)
  throws ScriptException {
 engine.put("helloScriptingWorld", new HelloScriptingWorld());
 engine.eval("println('Invoking getHelloReply method from JavaScript...');"
   +"var msg = helloScriptingWorld.getHelloReply('JavaScript');"
   + "println('Java returned: ' + msg)");
}
/** Method invoked from the above script to return a string. */
public String getHelloReply(String name) {
 return "Java method getHelloReply says, 'Hello, " + name + "'";
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值