Java 执行 JS 脚本工具

article/2025/9/24 10:25:31

Java 执行 JS 脚本工具

用途:为了便于系统扩展,提供了 JS 脚本的功能,可以通过在系统中执行脚本来获得更复杂的功能。

例如:系统提供了一个接口,这个接口不必非的有实现类,而是可以通过JS来实现这个接口的方法,在运行时载入JS脚本去实现。只要能融会贯通,可用的地方还是很多的。

关于JAVA 执行 JS 的基本功能参考这里:

http://www.2cto.com/kf/201505/402064.html

先看最基础的一个工具类

这里写图片描述

实际上有这么一个工具类就足够了,后面讲的例子也是基于这个工具类的。

这段代码的原理:

由于在 Java 的 javascript 引擎中,常用的List,Map等复杂对象的 属性值 不能在 js 中直接使用。因此这里遍历params所有的key,通过 Gson 转换value为 Json 字符串,再通过 eval 执行 var key = {...};,执行后,在引擎中就有了一个可以使用的遍历key值,经过这种转换,复杂的对象就可以应用在 js 引擎中了。

提示
可以通过:Binds bs = engine.getBindings(ScriptContext.ENGINE_SCOPE);获得脚本引擎作用域内的所有变量。

你还可以往 engine 中绑定 Java 中的对象,调用对象的方法,像 Dao,Service 应该是没问题的,你也可以尝试去调用数据库方法。

如果你想使用对象的属性,你就需要按照上面的方式使用。

下面是一个使用该工具类的简单例子。

通过 JS 实现 Java 接口

这只是一个简单的例子,其中动态代理的原理在 MyBatis接口的简单实现原理 中介绍过,这个例子没有实现如 MyBatis 那样强大的功能,为了演示,这里的 Java 都是单接口方法。

代理类

这里写图片描述

这个类需要将脚本传递进来,接口方法参数需要有@JsParam注解,convertArgs 方法将参数转换适合JSUtil工具类使用的Map类型,然后传入script和参数来执行,执行后通过ConvertUtils工具来转换返回值类型,最后返回结果。

@JsParam注解

这里写图片描述
由于低版本 Java 无法获取参数名,因此这里仅仅通过简单的注解来得到名字。

这里注解设置的名字就是我们脚本中可以直接用到的参数。

代理工厂

这里写图片描述
一个简单的工厂类。

测试代码

测试用的接口

这里写图片描述

注:
接口很简单,但是参数类型可以是List<User>这样的复杂对象。
你可以在 JS 脚本中按照 JSON 的方式去使用所有的值。

测试代码

这里写图片描述

注意脚本中的num1num2,必须和接口中定义的注解名一致。

更特殊一点的可以是这样的脚本:

var sum = num1+num2;
sum;

这里需要注意如何返回值,就是将要返回的值写在最下面。不能写成 return sum;。不知道和函数式编程有什么联系,如果有懂的人,欢迎留言回复。

输出结果

100

最后

虽然这个例子没有直接使用的意义,但是其中包含的原理可以对你设计 JS 脚本功能有一定的帮助。在 Java 中,通过 Js 作为一种扩展手段是很容易可以实现的。


http://chatgpt.dhexx.cn/article/RgRuVYbq.shtml

相关文章

Javascript脚本运行的方式(js写在页面什么地方)

1、脚本写在函数里&#xff0c;body标签里加onload这个函数&#xff0c;意为body加载完成执行函数func。代码如下: <script type"text/javascript"> function func(){……} </script> <body onload"func()"> </body> 也可以调…

各浏览器安装JS脚本的方法

转自&#xff1a;各浏览器安装JS脚本的方法【IE、Chrome、FireFox、Opera】很多功能&#xff0c;本来是浏览器原本没有的&#xff0c;我们可以通过扩展来实现&#xff0c;但有的功能&#xff0c;却需要安装脚本&#xff0c;但是大多数浏览器默认都无法支持脚本&#xff0c;这就…

selenium执行js脚本

说明&#xff1a;本篇博客基于selenium 4.1.0 JavaScript是运行在客户端&#xff08;浏览器&#xff09;和服务器端的脚本语言&#xff0c;允许将静态网页转换为交互式网页。可以通过 Python Selenium WebDriver 执行 JavaScript 语句&#xff0c;在Web页面中进行js交互。那么j…

Auto.js脚本编写教程 (一)

一、工具下载安装 手机端&#xff1a;auto.js&#xff08;百度即可&#xff09; PC端&#xff1a; VS Code JDK SDK Tools&#xff08;定位工具: Uiautomatorviewer&#xff09; 注&#xff1a; VS Code 用于代码编写 Uiautomatorviewer用于元素定位&#xff0c;也…

好用的 JS 脚本

文章目录 &#x1f69c;3D 可视化&#x1f69a;ThingJS&#x1f4a1;特点&#x1f4a1;案例 &#x1f69c;拖拽库&#x1f69a;SortableJS&#x1f4a1;特点&#x1f4a1;案例 &#x1f69c;3D 可视化 &#x1f69a;ThingJS 物联网 3D 可视化 PaaS 平台 官网&#xff1a;https…

JavaScript 【基础】 浏览器执行脚本

步骤 一&#xff1a; 在浏览器指定界面按下F12二&#xff1a;找到输入代码的地方三&#xff1a;输入js代码 平时我们做开发的&#xff0c;或者想使用一些外挂&#xff0c;脚本来实现界面的一些更改之类的操作&#xff0c;可以直接在浏览器上面进行。 一&#xff1a; 在浏览器指…

各种JS脚本该怎么使用呢?以城城为例,教程在这里自行食用。

1、首先先下载XXX.js结尾的 链接&#xff1a;https://pan.baidu.com/s/17sXHe_l7eHsUgeHtYRmkHg 提取码&#xff1a;jdck 2、然后用FinalShell工具连接搭建青龙的服务器&#xff0c;把文件上传到青龙面板的这个路径内 每个人搭建的方式不一样我的是这个路径 /root/QL/scripts…

运行JS脚本的几种方式

如何运行JS脚本 直接运行 下载nodejs, 使用node *.js即可执行&#xff0c;方便快捷 如果*.js文件中有引入的第三方模块&#xff0c;需要先下载第三方模块 注意要使用require导入而不是import, import是ES6语法&#xff0c; 较新&#xff0c; 可能会导致js无法运行 初始化pac…

如何在浏览器中执行js脚本

方式1&#xff1a;F12打开调试工具&#xff0c;利用控制台运行JS脚本 方式2: Chrome snippets 小脚本 我们也可以在 Chrome 浏览器中创建一个脚本来执行&#xff0c;在开发者工具中点击 Sources 面板&#xff0c;选择 Snippets 选项卡&#xff0c;在导航器中右击鼠标&#xff…

JavaScript 脚本

一、JavaScript 脚本 Bootstrap 包括一些 JavaScript 帮助用户做出更加充满生机、活动的项目。欢迎学习更多关于如何去调用动态事件、灵活展示的数据和编程性的API选项等。 二、单个引用或者编译 插件可以单独包含&#xff08;使用Bootstrap的单独js/dist/*.js&#xff09;&…

JavaScript脚本基础教程

1、JavaScript简单介绍 Javascript&#xff08;简称js&#xff09; 语言诞生主要是完成页面的数据验证。因此它运行在客户端&#xff0c;需要运行浏览器来解析执行 JavaScript 代码。 JS 是 Netscape 网景公司的产品&#xff0c;最早取名为 LiveScript;为了吸引更多 java 程序…

SAP PP模块后台表关系图

生产主数据关系图 生产业务数据后台数据关系图 更多文章请点击 写于&#xff1a;深圳大鹏 20230717

PaddleClas套件——PP-ShiTuV2模型详解

1. PP-ShiTuV2模型介绍 PP-ShiTuV2 是基于 PP-ShiTuV1 改进的一个实用轻量级通用图像识别系统&#xff0c;由主体检测、特征提取、向量检索三个模块构成&#xff0c;相比 PP-ShiTuV1 具有更高的识别精度、更强的泛化能力以及相近的推理速度*。主要针对训练数据集、特征提取两个…

SAP-PP知识分享-PP常用表积累

原文链接&#xff1a;SAP-PP知识分享-PP常用表积累&#xff08;建议收藏&#xff0c;以后好找&#xff09;导读 本篇给大家简单总结一下PP中常见、常用的表集合。 正文 1.需求相关RESB---预定/相关需求MDKhttps://mp.weixin.qq.com/s/s7SlfOOFf5QjK_oZalaujw 大家可以关注我个人…

PP-LCNet论文全文解析

PP-LCNet: A Lightweight CPU Convolutional Neural Network &#x1f517; PDF Link &#x1f37a; Github Code Section 1 介绍 随着模型参数和FLOPs的加大&#xff0c;模型越来越难以在基于ARM架构的移动端设备或者x86架构的CPU上取得较快的推理速度。虽然有许多优秀的移动…

PP-YOLO论文阅读笔记

PP-YOLO: An effective and efficient implementation of object detector 期刊: arXiv preprint年份:2020 主要内容列举: ① :实现一个有效性和效率相对平衡的对象检测器&#xff0c;可以直接应用于实际应用场景; ② ②:添加了一系列几乎不会增加推断时间的技巧&#xff0c;以…

【paddle】PP飞桨

PP飞桨AI Studio 项目&#xff1a;https://aistudio.baidu.com/aistudio/projectoverview/public 数据集&#xff1a;https://aistudio.baidu.com/aistudio/datasetoverview 课程&#xff1a;https://aistudio.baidu.com/aistudio/course 比赛&#xff1a;https://aistudio.ba…

PP-ShiTu: A Practical Lightweight Image Recognition System

最近看了一个新的分享&#xff0c;关于图像识别的&#xff0c;对于大规模图像搜索以及新物品频繁情况下表现良好。 论文&#xff1a; https://arxiv.org/abs/2111.00775项目&#xff1a; https://github.com/PaddlePaddle/PaddleClas Abstract 近年来&#xff0c;图像识别的…