脚本包

Java 脚本功能是在 javax.script 包中。这是一个比较小的,简单的API。脚本的出发点是 ScriptEngineManager 类,ScriptEngineManager是一个工厂集合,可以通过name或tag的方式获取某个脚本的工厂并生成一个此脚本的ScriptEngine,目前只有javascript的工厂。通过工厂函数得到了ScriptEngine之后,就可以用这个对象来解析脚本字符串了,直接调用Object obj = ScriptEngine.eval(String script)即可,返回的obj为表达式的值,比如true、false或int值。使用脚本编程接口最简单的方法如下:

1.创建一个 ScriptEngineManager 对象
2.从 ScriptEngineManager 获取 ScriptEngine 对象
3.使用 ScriptEngine的eval方法执行脚本
现在,是时候看一些样本代码了。了解一些JavaScript有助于阅读这些例子,但不是强制的。

示例一:执行JavaScript代码,传参并获取返回值

//获取ScriptEngineManager对象
ScriptEngineManager manager = new ScriptEngineManager();
//获取JavaScript执行引擎
ScriptEngine engine = manager.getEngineByName("js");
//方式一
String script = "function hello(name){" +" return 'Hello '+name; " +"}";
engine.eval(script);
// 注意:JavaScript engine 实现了 Invocable 接口
Invocable inv = (Invocable)engine;
// 执行这个名字为 "hello"的全局的函数
Object eval = inv.invokeFunction("hello", "张三枫");
System.out.println(eval);//方式二
script = "'Hello '+name";//JS可执行的表达式
//传入参数
engine.put("name","张三枫");
//执行获取结果
eval = engine.eval(script);
System.out.println(eval);

示例二:执行JavaScript代码,获取其中的变量

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
String script = "var name='豹子头零充'; var age = 18; var sex ='男'";
engine.eval(script);
Object name= engine.get("name");
System.out.println(name);

示例三:执行JavaScript代码,获取对象、数组

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
String script = "var obj={};" +"obj.name='豹子头零充';" +"obj.age = 18;" +"obj.sex ='男';" +"var array=['A','B','C'];";
engine.eval(script);
//获取js变量obj(json类型)
ScriptObjectMirror obj = (ScriptObjectMirror)engine.get("obj");
//获取JSON对象的name值
System.out.println(obj.get("name"));
//获取js变量array(数组)
ScriptObjectMirror array=(ScriptObjectMirror) engine.get("array");
//getSlot(int index)函数用于获取下标为index的值
System.out.println(array.getSlot(0));

不得不说,ScriptEngine是个很强大的引擎,可以解析JS脚本,或者以JS的规则解析表达式。

Java执行JavaScript代码:传参、获取变量、返回值、JSON对象相关推荐

  1. java执行JavaScript代码

    java执行JavaScript代码的方式有很多,这里讲一下使用 Mozilla 公司开发的 Rhino 实现的,该实现从 1.6开始集成到 jdk里面. 1,对象相互转化 // 获取引擎对象    ...

  2. Shell函数(函数定义、函数变量、函数调用、函数传参、函数返回值、获取函数返回值)

    分享知识 传递快乐 1.函数定义 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.Shell 函数定义的语法格式如下: [function] funname [()]{函 ...

  3. java doget 返回json_HttpClient调用doGet、doPost、JSON传参及获得返回值

    调用 doPost:map传参 Map map = new HashMap<>(); map.put("test","test"); String ...

  4. Selenium Webdriver 的使用java执行js代码 解决 ScriptEngine不支持浏览器内置对象window,document的问题

    问题场景: 使用java 掉用js代码,发现 ScriptEngine不支持浏览器内置对象window,document的问题: 问题一:为什么要 用java掉用js代码? 比如在 抓取(爬取)对方网 ...

  5. java中Long类型传参校验注解_JAVA——实现json bean实体类的传参校验模板及注解详解...

    关注wx:CodingTechWork,一起学习进步. 引言 在java开发中,经常需要和外界系统进行参数对接,api设计中难免会遇到json传参不一致的情况,虽然纸面或者接口规范约束了应该怎么传参, ...

  6. golang 对字符串按照长度划分,每隔固定长度增加一个指定字符,传参修改对比返回值修改的典型优势

    func split(key string,temp *string){if len(key)<=64 {*temp = *temp+key+"\n"}for i:=0;i& ...

  7. C#打开php链接传参然后接收返回值

    php代码 一.php <?php header("Content-Type:text/html;charset=UTF-8"); $u=$_POST['zdupdate'] ...

  8. 【java神操作】java竟然还可以能执行Javascript代码!!

    引入:闲着没事想研究下学校查成绩的接口,然后自己写程序查.但是查成绩首先必须登录,所以必须先研究学校网站的登录接口,抓包后发现传到后台的学号密码是经过加密的,研究其加密方法成为必经之路 发现学校网站改 ...

  9. 【Java脚本引擎】脚本引擎执行JavaScript代码

    应用场景 公司有30员工,每个人工资计算方式不同.现在需要计算工资. 传统的方法:一个接口,30个实现类. 使用脚本引擎:编写一个xml文件,每人一个计算公式,使用的时候可以把公式加载到程序中,启动时 ...

最新文章

  1. 皮猜按下谷歌招聘暂停键,疫情之下,「紧日子」来了
  2. 《大话数据结构》第9章 排序 9.8 归并排序(上)
  3. 招不到产品经理?送你160000+产品经理
  4. 句子相似度比较的归一化
  5. 综合中央计算机系统简称,全国计算机等级考试级试题及答案.doc
  6. P4201-[NOI2008]设计路线【结论,树形dp】
  7. VMware安装VMwaretools
  8. 苹果阻止《堡垒之夜:拯救世界》Mac版更新
  9. 智能优化算法:水基湍流优化算法-附代码
  10. ai人工智能对话了_产品制造商如何缓解对话式AI中的偏见
  11. 百套Java实战项目
  12. Mac上搭建IOS自动化测试环境
  13. FastReport .NET 2022.3.6-新版Crack
  14. 低功耗设计实现中secondary power pin的连接方法汇总
  15. 计算机开机检测dhcp,电脑开机显示dhcp是什么意思
  16. 二十、融会贯通之全流程操作
  17. boto3使用教程用法
  18. css3如何实现字体放大缩小动画
  19. linux如何简单隐藏文件及显示隐藏文件
  20. git 如何提交丰富的emoji表情

热门文章

  1. SAP 应收票据处理之贴现流程和配置
  2. 重发布-路由策略实验1(1.8)
  3. LINUX进程变量隔离 虚拟地址
  4. python 面向对象高级应用(三)
  5. 办公软件的一些操作,copy过来的,啥也没改
  6. drools性能优化
  7. SharePoint 2010图文安装教程
  8. 用python分析世界五百强企业数据
  9. SAP中货物移动物料凭证打印——维护输出条件
  10. 简单的照片人物美白教程