java利用JDK调用并执行js源码
前言:
不同开发语言之间具有通用性,更具有协作调用的可能。有时候对于一些场景会有调用js的需求,因此下面展示了一个java利用自身JDK调用js函数的demo,供感兴趣的朋友参考。
js函数文件 expression.js
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调用代码:
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:
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
-------- 以上内容纯属个人学习总结,不代表任何团体或单位。若有理解不到之处请见谅!---------
分类:
Java SE
标签:
javascript
, Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?