java调用js文件_java调用js执行js文件

本文展示了如何在Java中使用ScriptEngineManager和Invocable接口来调用JavaScript文件并执行其中的函数。通过示例代码,演示了test1、test2和test3三个方法,分别解释了直接定义和执行JS函数、读取JS文件执行以及调用JS文件内函数的过程。
摘要由CSDN通过智能技术生成

/*

*Written by:weidan 2013-2-7

*QQ:956698821

*Email:weidanhappy@sina.cn

*Remark:This class is used to complete ......

*/

package Test;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.util.Scanner;

import javax.script.Bindings;

import javax.script.Compilable;

import javax.script.CompiledScript;

import javax.script.Invocable;

import javax.script.ScriptContext;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

import javax.script.ScriptException;

public class TestScript {

public static void main(String[] args) throws ScriptException,

NoSuchMethodException, IOException {

test2();

}

public static void test1() throws ScriptException {

ScriptEngine engine = new ScriptEngineManager()

.getEngineByName("javascript");

Compilable compilable = (Compilable) engine;

Bindings bindings = engine.createBindings(); // Local级别的Binding

String script = "function add(op1,op2){return op1+op2} add(a, b)"; // 定义函数并调用

CompiledScript JSFunction = compilable.compile(script); // 解析编译脚本函数

bindings.put("a", 1);

bindings.put("b", 2); // 通过Bindings加入参数

Object result = JSFunction.eval(bindings);

System.out.println(result); // 调用缓存着的脚本函数对象,Bindings作为参数容器传入

}

public static void test2() throws ScriptException, NoSuchMethodException, FileNotFoundException {

int param = 10;

// 建立一个javascript的执行引擎

ScriptEngine scriptEngine = new ScriptEngineManager()

.getEngineByName("javascript");

// 建立上下文变量

Bindings bind = scriptEngine.createBindings();

bind.put("factor", 1);

scriptEngine.setBindings(bind, ScriptContext.ENGINE_SCOPE);

FileReader reader = new FileReader("d://test.js");

scriptEngine.eval(reader);

if (scriptEngine instanceof Invocable) {

Invocable in = (Invocable) scriptEngine;

Double result = (Double) in.invokeFunction("square", param);

System.out.println("number " + param + " square result is "

+ result);

}

}

public static void test3() throws ScriptException, IOException, NoSuchMethodException {

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("javascript");

String jsFileName = "d://test.js";

// 读取js文件

FileReader reader = new FileReader(jsFileName);

// 执行指定脚本

engine.eval(reader);

if (engine instanceof Invocable) {

Invocable invoke = (Invocable) engine;

// 调用merge方法,并传入两个参数 // c = merge(2, 3);

Double c = (Double) invoke.invokeFunction("merge", 2, 3);

System.out.println("c = " + c);

}

reader.close();

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值