JAVA使用ScriptEngine 解析脚本
来源:互联网 发布:mac无法存储屏幕快照 编辑:程序博客网 时间:2024/06/05 07:19
前言
最近做一个功能需要把一个数学公式保存到数据库,然后通过java读取数学公式,传入参数进行计算,发现了java中的javax.script,它开始存在于JDK1.6,它可以解析通用的表达式,如三目,还可以利用js函数语法,创造一个就像java的函数一样存在于内存中随时可以被调用的函数,更可以将js中的对象直接转换成java对象。
script包
最主要的几个类和接口为:ScriptEngineManager,ScriptEngine,CompiledScript和Bindings
- ScriptEngineManager:是一个工厂的集合,可以通过name或者tag的方式获取某一个脚本的工厂,并且生成一个脚本的ScriptEngine.
ScriptEngine engine=new ScriptEngineManager().getEngineByName("JavaScript");
- ScriptEngine:是一个脚本引擎,包含一些操作方法,eval,createBindings,setBindings
engine.eval(option); //option:"10+((D-parseInt(D/28)*28)/7+1)*10";
option 可以是一段js代码,函数,函数传参需要调用 engine.createBindings获得bindings,bindings.put(key,value)来传入参数
- CompliedScript: engine 实现该接口,可以将ScriptEngine解析一段脚本的结果存起来,方便多次调用,需要将engine向上转换
Compilable compilable=(Compilable) engine;CompiledScript JSFunction=compilable.compile(option); //解析编译脚本函数Bindings bindings=engine.createBindings();bindings.put(key,value);JSFunction.eval(bingdings);
- Bindings:用来存放数据的容器,它有3个层级,为Global级、Engine级和Local级,前2者通过ScriptEngine.getBindings()获得,是唯一的对象,而Local Binding由ScriptEngine.createBindings()获得,很好理解,每次都产生一个新的。Global对应到工厂,Engine对应到ScriptEngine,向这2者里面加入任何数据或者编译后的脚本执行对象,在每一份新生成的Local Binding里面都会存在。
Demo
String option="function getNum(num){if(num%7==0){ return 5+5*(parseInt(5*(num-parseInt(num/29)*28)/28)+1)}else{return 5;}} getNum(num)" ------------------------------- try{ Compilable compilable = (Compilable) engine; Bindings bindings = engine.createBindings(); //Local级别的Binding CompiledScript JSFunction = compilable.compile(option); //解析编译脚本函数 for(Map.Entry<String,Object> entry:map.entrySet()){ bindings.put(entry.getKey(),entry.getValue()); } Object result=JSFunction.eval(bindings); System.out.println(result); return (int)Double.parseDouble(result.toString()); }catch (ScriptException e) { e.printStackTrace(); }
阅读全文
1 0
- JAVA使用ScriptEngine 解析脚本
- Java ScriptEngine解析脚本学习
- Java用ScriptEngine解析脚本
- Java用ScriptEngine解析脚本
- Java ScriptEngine 解析js
- java ScriptEngine 使用 (支持JavaScript脚本,eval()函数等)
- java 中使用ScriptEngine执行javascript脚本代码和使用中应该注意的事项
- java JButton数组 scriptengine解析表达式
- java ScriptEngine 使用 (支持JavaScript脚本,eval()函数等) - *(00)*
- scriptEngine使用
- java ScriptEngine;
- 在Java中使用ScriptEngine调用javascript
- ScriptEngine使用java调用js代码
- Java中使用ScriptEngine(javax.script)
- ScriptEngine的学习使用
- ScriptEngine
- ScriptEngine
- java解析javascript方法,scriptengine初体验,实现后台调用js方法验证。
- 接口的理解
- java 一个偶数总能表示为两个素数之和。
- Python沙箱?不存在的
- java 判断一个素数能被几个9整除
- angular+adminlte使用心得
- JAVA使用ScriptEngine 解析脚本
- 安卓开发——为动态添加的EditText加载xml文档属性
- c++ 段错误 (core dumped )原因分析
- [入门]android概述
- 关于warning C4995的屏蔽问题
- linux 使用lseek函数来获取文件大小
- 动态创建dw的时候运行失败及列名选择
- java 两个字符串连接程序
- spring DI四种依赖注入方式