java运行javascript代码

25 篇文章 0 订阅
3 篇文章 0 订阅

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;
};


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值