前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java利用JDK调用并执行js源码

java利用JDK调用并执行js源码

作者头像
云海谷天
发布2022-08-09 14:32:33
1.4K0
发布2022-08-09 14:32:33
举报
文章被收录于专栏:技术一点点成长

前言:

  不同开发语言之间具有通用性,更具有协作调用的可能。有时候对于一些场景会有调用js的需求,因此下面展示了一个java利用自身JDK调用js函数的demo,供感兴趣的朋友参考。

js函数文件 expression.js

代码语言:javascript
复制
function merge(a, b) { 
 c = a * b; 
 return c; 
}

function isPrime (num)    
{    
    if (num <= 1) {    
        print("Please enter a positive integer >= 2.")    
        return false   
    }    
        
    var prime = true   
    var sqrRoot = Math.round(Math.sqrt(num))    
        
    for (var n = 2; prime & n <= sqrRoot; ++n) {    
        prime = (num % n != 0)    
    }    
        
    return prime    
} 

java调用代码:

代码语言:javascript
复制
package com.yeezhao.common.js;

import java.io.FileReader;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
/**
 * JAVA 调用 js脚本
 * @author Administrator -> junhong
 * @since  2016年12月14日 上午11:20:00
 */
public class ScriptEngineTest {

    public static void main(String[] args) throws Exception {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("javascript");

        String jsFileName = "expression.js"; // 读取js文件

        String path = ScriptEngineTest.class.getClassLoader().getResource("").getPath();
        System.out.println("path=" + path);
        FileReader reader = new FileReader(path + 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);

            // ok = isPrime(5);
            Integer[] nums = { 1, 2, 3, 5, 12, 112, 100, 4351561 };
            for (Integer num : nums) {
                System.out.println(num + " --> " + invoke.invokeFunction("isPrime", num));
            }
            
            //hellp
            invoke.invokeFunction("hello1", "John");
        }

        reader.close();

    }
}

输出Output:

代码语言:javascript
复制
path=/D:/Eclipse/workspace/yz-test-20161207/target/classes/
c = 6.0
Please enter a positive integer >= 2.1 --> false
2 --> true
3 --> true
5 --> true
12 --> false
112 --> false
100 --> false
4351561 --> true
before hello2    ----> hello2     John
after hello2
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档