《Java核心技术 卷II》脚本计算与绑定

脚本计算与绑定

有了引擎直接调用脚本
eval,英文翻译 评估,计算机领域的功能是 获取返回值
Object result = engine.eval(scriptString);
脚本存储在文件中,先打开Reader再调用eval
Object result = engine.eval(reader);
同一个引擎调用多个脚本,此脚本定义的变量、函数或类大多数会保留,将来可以使用
engine.eval("n = 1728"); Object.result = engine.eval("n+1"); //返回1729
注释:Object param = factory.getParameter("THREADING"),查看多线程并发执行脚本是否安全。
  • null,并发执行不安全。
  • "MULTITHREADED",并发执行安全,一个线程执行对其他线程是可视的。
其他的略,自己查。
引擎中添加新的变量绑定,脚本代码从引擎作用域中读取k
engine.put("k",1728); Object result = engine.eval("k+1");
脚本语言可以访问Java对象语法更简单
engine.put("b",new JButton()); engine.eval("b.text = 'Ok'");
获取脚本语句绑定的变量
engine.eval("n = 50"); Object result = engine.get("n");
全局作用域,添加到ScriptEngineManager中绑定对所有引擎都是可视的
可以将绑定收集到一个Bindings对象中,将其传递给eval方法
Bindings scope = engine.createBindings(); scope.put("b",new JButton()); engine.eval(scriptString,scope);
注释:除引擎作用域和全局作用域之外,Web容器可能需要请求作用域或会话作用域。
自己去实现ScriptContext接口,管理一个作用域集合。
整体案例
package 第8章脚本;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;

import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.swing.JButton;

public class JSEngineTest {

    public static void main(String[] args) throws ScriptException, FileNotFoundException {
        ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
        System.out.println(jse);
        jse.eval("n = 50");
        Object result = jse.eval("n + 1");
        System.out.println(result);
        Reader helloJS = new FileReader("D:\\ChromeCoreDownloads\\eclipse-jee-2024-09-R-win32-x86_64\\eclipse\\eclipse-workspace\\spring5-depth-analysis\\src\\main\\resources/hello.js"); 
        jse.eval(helloJS);//var hello = "hello world!!!";
        System.out.println(jse.get("hello"));
        jse.put("k", 1728);
        System.out.println(jse.eval("k+2"));
        Bindings scope = jse.createBindings();
        scope.put("b", new JButton());
        jse.eval("b.text = 'Ok'",scope);
        Object b =  jse.eval("b.text",scope);
        System.out.println(b);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿立聊全栈

有作用的,有闲钱的支持一点。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值