在jdk1.6之后就支持了调用脚本语言,比如PHP,Ruby,Groovy,JavaScript
脚本语言优点:
灵活:脚本语言一般都是动态类型,可以不用声明变量类型而直接使用,也可以在运行期改变类型。
便捷:脚本语言是一种解释型语言,不需要编译成二进制代码。
一些易变业务可以使用脚本语言编写。
下面给出一个例子程序:
脚本语言优点:
灵活:脚本语言一般都是动态类型,可以不用声明变量类型而直接使用,也可以在运行期改变类型。
便捷:脚本语言是一种解释型语言,不需要编译成二进制代码。
一些易变业务可以使用脚本语言编写。
下面给出一个例子程序:
demo.js
function formula(var1, var2){
return var1 + var2 * factor;
}
简单的运算
CallJavaScript.java
package org.xxz.test;
import java.io.FileReader;
import java.util.Scanner;
import javax.script.Bindings;
import javax.script.Invocable;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
@SuppressWarnings("resource")
public class CallJavaScript {
public static void main(String[] args) throws Exception {
// 获取一个javascript 执行引擎
ScriptEngine engine = new ScriptEngineManager()//
.getEngineByName("javascript");
// 绑定上下文
Bindings bind = engine.createBindings();
bind.put("factor", 1);
// 绑定上下文,作用域是当前引擎范围
engine.setBindings(bind, ScriptContext.ENGINE_SCOPE);
Scanner input = new Scanner(System.in);
while(input.hasNextInt()){
int first = input.nextInt();
int sec = input.nextInt();
System.out.println("input numbers: "+first+" " +sec);
// 执行js代码
engine.eval(new FileReader("src/org/xxz/test/demo.js"));
if(engine instanceof Invocable){
// 是否可调用方法
Invocable in = (Invocable) engine;
// 执行js中的函数
Double result = (Double) in.invokeFunction("formula", first, sec);
System.out.println("result:" + result.intValue());
}
}
}
}