前言:

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

js函数文件 expression.js

  1. function merge(a, b) {
  2. c = a * b;
  3. return c;
  4. }
  5.  
  6. function isPrime (num)
  7. {
  8. if (num <= 1) {
  9. print("Please enter a positive integer >= 2.")
  10. return false
  11. }
  12.  
  13. var prime = true
  14. var sqrRoot = Math.round(Math.sqrt(num))
  15.  
  16. for (var n = 2; prime & n <= sqrRoot; ++n) {
  17. prime = (num % n != 0)
  18. }
  19.  
  20. return prime
  21. }

java调用代码:

  1. package com.yeezhao.common.js;
  2.  
  3. import java.io.FileReader;
  4.  
  5. import javax.script.Invocable;
  6. import javax.script.ScriptEngine;
  7. import javax.script.ScriptEngineManager;
  8. /**
  9. * JAVA 调用 js脚本
  10. * @author Administrator -> junhong
  11. * @since 2016年12月14日 上午11:20:00
  12. */
  13. public class ScriptEngineTest {
  14.  
  15. public static void main(String[] args) throws Exception {
  16. ScriptEngineManager manager = new ScriptEngineManager();
  17. ScriptEngine engine = manager.getEngineByName("javascript");
  18.  
  19. String jsFileName = "expression.js"; // 读取js文件
  20.  
  21. String path = ScriptEngineTest.class.getClassLoader().getResource("").getPath();
  22. System.out.println("path=" + path);
  23. FileReader reader = new FileReader(path + jsFileName); // 执行指定脚本
  24. engine.eval(reader);
  25.  
  26. if (engine instanceof Invocable) {
  27. Invocable invoke = (Invocable) engine; // 调用merge方法,并传入两个参数
  28.  
  29. // c = merge(2, 3);
  30.  
  31. Double c = (Double) invoke.invokeFunction("merge", 2, 3);
  32.  
  33. System.out.println("c = " + c);
  34.  
  35. // ok = isPrime(5);
  36. Integer[] nums = { 1, 2, 3, 5, 12, 112, 100, 4351561 };
  37. for (Integer num : nums) {
  38. System.out.println(num + " --> " + invoke.invokeFunction("isPrime", num));
  39. }
  40.  
  41. //hellp
  42. invoke.invokeFunction("hello1", "John");
  43. }
  44.  
  45. reader.close();
  46.  
  47. }
  48. }

输出Output:

  1. path=/D:/Eclipse/workspace/yz-test-/target/classes/
  2. c = 6.0
  3. Please enter a positive integer >= 2.1 --> false
  4. --> true
  5. --> true
  6. --> true
  7. --> false
  8. --> false
  9. --> false
  10. --> true
  11. before hello2 ----> hello2 John
  12. after hello2

 

java利用JDK调用并执行js源码的更多相关文章

  1. Workbench利用Python驱动DM执行Js进行建模

    Workbench的工作平台下可以利用Python进行一些操作,包括添加system和component等等.DM可以通过执行Jscript脚本进行自动建模,因此,结合这两块的内容,可以利用Pytho ...

  2. Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  3. Java线程状态、线程start方法源码、多线程、Java线程池、如何停止一个线程

    下面将依次介绍: 1. 线程状态.Java线程状态和线程池状态 2. start方法源码 3. 什么是线程池? 4. 线程池的工作原理和使用线程池的好处 5. ThreadPoolExecutor中的 ...

  4. basket.js 源码分析

    basket.js 源码分析 一.前言 basket.js 可以用来加载js脚本并且保存到 LocalStorage 上,使我们可以更加精准地控制缓存,即使是在 http 缓存过期之后也可以使用.因此 ...

  5. Underscore.js 源码学习笔记(上)

    版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}());  这样的东西,我们应该知道这是一个 IIFE(立即执行 ...

  6. underscore.js源码研究(6)

    概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...

  7. Java的三种代理模式&完整源码分析

    Java的三种代理模式&完整源码分析 参考资料: 博客园-Java的三种代理模式 简书-JDK动态代理-超详细源码分析 [博客园-WeakCache缓存的实现机制](https://www.c ...

  8. Java SPI机制实战详解及源码分析

    背景介绍 提起SPI机制,可能很多人不太熟悉,它是由JDK直接提供的,全称为:Service Provider Interface.而在平时的使用过程中也很少遇到,但如果你阅读一些框架的源码时,会发现 ...

  9. 深入理解unslider.js源码

    最近用到了一个挺好用的幻灯片插件,叫做unslider.js,就想看看怎么实现幻灯片功能,就看看源码,顺便自己也学习学习.看完之后收获很多,这里和大家分享一下. unslider.js 源码和使用教程 ...

随机推荐

  1. openresty 前端开发入门三之JSON篇

    这章主要介绍一下,lua怎么返回一个json字符串,怎么把一个table转成json字符串,又怎么把一个json字符串转成json 其实很简答,直接使用cjson库的encode.decode方法即可 ...

  2. 数据库---实验四 oracle的安全性和完整性控制

    实验内容: (一) 授权 . 以dba用户的身份登陆oracle,创建用户u1+学号后四位,u2+学号后四位. SQL> create user u1_3985 identified by &q ...

  3. 回顾java基础—Java数据类型

    1  java数据类型.8种基本类型,3种引用类型 基本类型(也称:原始类型):byte.short.int.long.char.float.double.boolean 引用类型:类,接口,数组 2 ...

  4. QT数据库连接的几个重要函数的使用及注意事项(原创)

    注:在这里数据库对象等同于数据库连接对象,也就是QSqlDatabase类的对象 QSqlDatabase QSqlDatabase::addDatabase((const QString & ...

  5. js—模糊查询

    首先要明白什么是模糊查询(废话又来了),就是根据关键字把列表中符合关键字的一项或某项罗列出来,也就是要检查列表的每一项中是否含有关键字,因此抽象一下就是一个字符串中是否含有某个字符或者字符串. 以下例 ...

  6. 释放Android的函数式能量(I):Kotlin语言的Lambda表达式

    原文标题:Unleash functional power on Android (I): Kotlin lambdas 原文链接:http://antonioleiva.com/operator-o ...

  7. 搞不清FastCgi与PHP-fpm之间是个什么样的关系?

    问 我在网上查fastcgi与php-fpm的关系,查了快一周了,基本看了个遍,真是众说纷纭,没一个权威性的定义. 网上有的说,fastcgi是一个协议,php-fpm实现了这个协议: 有的说,php ...

  8. mongodb 3.x 之实用新功能窥看[2] ——使用$lookup做多表关联处理

    这篇我们来看mongodb另一个非常有意思的东西,那就是$lookup,我们知道mongodb是一个文档型的数据库,而且它也是最像关系型数据库的 一种nosql,但是呢,既然mongodb是无模式的, ...

  9. CentOS安装Apache-2.4.10+安全配置

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. #准备工作# 在安装Nginx之前,请确保已经使用yum安装了各基础组件,并且配置了www用户和用户组,具体见<CentOS ...

  10. 【码在江湖】前端少侠的json故事(下):jsonp的应用

    jsonp的应用 话说天下大势,分久必合,合久必分,代码江湖自进入21世纪以来,前后端分离成为了大势所趋,代码分工更为精细,更为深入,而正所谓码在江湖,身不由己,为了更好的实现需求,程序猿们必须不断学 ...