今天分享一个通过Java调用Js方法的工具类。
工具类:
import jdk.nashorn.api.scripting.NashornScriptEngine;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
/**
* @ClassName: JsUtil
* @Description: JS操作工具类
* @author: xiaofei
* @create: 2021年12月10日
*/
public class JsUtil {
/**
* logger
*/
private static final Logger LOGGER = LoggerFactory.getLogger(JsUtil.class);
/**
* 调用js方法
*
*
* @param functionName js函数名
* @param params 参数
* @param jsPath js真实路径
* @return 数据
*/
public static String callJsFunction(String functionName, Object[] params, String jsPath) {
Object res = null;
try {
File file = new File(jsPath);
String jsStr = readFile(file);
String[] options = new String[]{"--language=es6"};
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
NashornScriptEngine engine = (NashornScriptEngine) factory.getScriptEngine(options);
// 加载js
engine.eval(jsStr);
// 调用
res = engine.invokeFunction(functionName, params);
} catch (Exception e) {
LOGGER.error("java调用js代码出错:", e);
}
if (StringUtils.isNull(res)) {
return "";
}
return res.toString();
}
/**
* 读取文件、读取文本
*
* @param file 文件位置
* @return 数据
*/
public static String readFile(File file) {
StringBuilder result = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String s = null;
while ((s = br.readLine()) != null) {
result.append(System.lineSeparator() + s);
}
br.close();
} catch (Exception e) {
LOGGER.error("读取文件失败:", e);
}
return result.toString();
}
}
JS代码:
function add(var1,var2){
return var1 + var2;
}
测试代码:
public static void main(String[] args) throws Exception {
String add = JsUtil.callJsFunction("add", new Object[]{1, 1}, "D:\\test.js");
System.out.println(add);
}
打赏
当前共有 0 条评论