Java调用js文件执行相应的方法
在JDK1.6的ScriptEngine类,允许用户直接执行js代码。
package com.majker.common.util;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
/****************************************************
* 描述:
* java运行javascript代码
*
* @author majker
* @date: 2019/8/3
* @version 1.0
**************************************************/
public class JavaScriptJunitTest {
@Test
public void test() {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
try {
engine.eval("function add(a,b){" +
"return a+b;" +
"}");
if (engine instanceof Invocable) {
Invocable in = (Invocable) engine;
System.out.println(in.invokeFunction("add", 1, 1));
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void test2() throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
//使用springframework.core包 读取资源文件
String jsName = "javaScriptJunitTest.js";
ClassPathResource resource = new ClassPathResource(jsName);
File file = resource.getFile();
//读取js文件
FileReader fileReader = new FileReader(file);
//执行指定脚本
Object eval = engine.eval(fileReader);
//打印出文件的内容
System.out.println(eval);
if (engine instanceof Invocable) {
Invocable in = (Invocable) engine;
System.out.println(in.invokeFunction("add", 1, 1));
System.out.println(in.invokeFunction("getNowFormatDate"));
System.out.println(in.invokeFunction("getDateTime"));
}
}
}
js文件放在 resources目录下
/**
* 和运算
* @param a
* @param b
* @returns {*}
*/
var add=function(a, b) {
return a + b;
}
/**
* 获取当前时间
*/
var getDateTime=function() {
var date = new Date();//实例一个时间对象;
var seperator1 = "-";
var year = date.getFullYear();//获取系统的年;
var month = date.getMonth() + 1;//获取系统月份,由于月份是从0开始计算,所以要加1
var strDate = date.getDate();// 获取系统日,
var hours=date.getHours(); //获取系统时,
var minutes=date.getMinutes(); //分
var seconds=date.getSeconds(); //秒
month=month<10?"0"+month:month;
strDate=strDate<10?"0"+strDate:strDate;
hours=hours<10?"0"+hours:hours;
minutes=minutes<10?"0"+minutes:minutes;
seconds=seconds<10?"0"+seconds:seconds;
var currentdate = year + seperator1 + month + seperator1 + strDate+" "+hours+":"+minutes+":"+seconds;
return currentdate;
};