J2SE 8的脚本
1. 引擎工厂的属性
| 引擎 | 名字 | MIME类型 | 文件扩展 |
|---|---|---|---|
| Nashorn | nashorn,Nashorn js,JS JavaScript,javascript ECMAScript,mcmascript |
application/javascript application/ecmascript text/javascript text/ecmascript |
js |
| Groovy | groovy | groovy | |
| Renjin | Renjin | text/x-R | R,r,S,s |
| SISC Scheme | sisc | scheme,sisc |
2. 获取manager
ScriptEngineManager manager = new ScriptEngineManager();
System.out.println("Available factories: ");
3. 查看线程安全
for (ScriptEngineFactory factory : manager.getEngineFactories()){
System.out.println(factory.getEngineName());
//null:不安全
//MULTITHREADED:安全
//...
System.out.println("线程安全:"+factory.getParameter("THREADING"));
}
4. 获取js引擎
final ScriptEngine engine = manager.getEngineByName("nashorn");
if (engine == null) {
System.err.println("No engine for nashorn");
System.exit(1);
}
5. 调用脚本
engine.eval("n=88");
Object evalResult = engine.eval("n+2");
System.out.println(evalResult);
engine.put("x", 99);
evalResult = engine.eval("x+2");
System.out.println(evalResult);
6. 重定向输出
Writer orinalWriter = engine.getContext().getWriter();
engine.getContext().setWriter(new PrintWriter("E:\\js.txt"));
engine.eval("print('hello')");
engine.getContext().setWriter(orinalWriter);
//只有脚本引擎的输出被改变
System.out.println("hello");
7. 调用函数
engine.eval("function greet(how ,whom) {return how+','+whom}");
evalResult = ((Invocable)engine).invokeFunction("greet", "hello","world");
System.out.println(evalResult);
8. 调用方法
engine.eval("function Greeter(how){this.how=how}");
engine.eval("Greeter.prototype.welcome= function(whom) {return this.how+','+whom}");
Object yo = engine.eval("new Greeter('Yo')");
evalResult = ((Invocable)engine).invokeMethod(yo, "welcome","world");
System.out.println(evalResult);
9.调用接口
package shell;
public interface Greeter {
String welcome(String whom);
}
//定义function
engine.eval("function welcome(whom) {return 'welcome hello,'+whom}");
Greeter greeter = ((Invocable)engine).getInterface(Greeter.class);
evalResult = greeter.welcome("world");
System.out.println(evalResult);
10. 编译脚本
if(engine instanceof Compilable){
CompiledScript compiledScript = ((Compilable)engine).compile("print('hello xxx')");
compiledScript.eval();
}
J2SE 8的脚本的更多相关文章
- 使用Jena RDF API 开发脚本语言管理资源描述框架模型
摘要 资源描述框架(Resource Description Framework RDF)是一种以XML格式描述元数据的标准格式.Jena是一种用于将关系数据库或是文本文件中所表示的数据建立为元数据模 ...
- 有关android工程的构建脚本(build.xml)的学习
学习[android-sdk-linux根目录]/tools/ant/build.xml,觉得如下几点很有用,记录之 1)ant脚本中属性值是于前置定义优化的原则,即属性发生重复定义时,前面定义的值不 ...
- Linux服务器Jboss运行环境搭建步骤和开机自动启动脚本编写运行
Jboss运行环境:Linux+Jdk+Jboss+jsp系统 Jboss软件说明:类似于Tomcat,就是一个跑Jsp系统的环境,他的站点路径跟Tomcat类似,Tomcat存放站点文件到webap ...
- tomcat多实例方案启动脚本
批量启动 #!/bin/sh BASE_PATH="/usr/local/tomcat8/tomcat-ins/"bash $BASE_PATH/web1/tomcat.sh st ...
- Apache执行Python脚本
由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...
- SQL Server镜像自动生成脚本
SQL Server镜像自动生成脚本 镜像的搭建非常繁琐,花了一点时间写了这个脚本,方便大家搭建镜像 执行完这个镜像脚本之后,最好在每台机器都绑定一下hosts文件,不然的话,镜像可能会不work 1 ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- 探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密
下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问 ...
- 第一个shell脚本
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...
随机推荐
- WPF 中对启动参数的处理
/// <summary> /// Interaction logic for App.xaml /// </summary> public partial ...
- MHA之Binlog Dump (GTID)僵尸进程清理
master存活的状态下切换 masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_mas ...
- zsh 使用
使用ctrl+r,弹出搜索框: bck-i-search: mac os 系统默认的终端为bash,切换该终端为zsh,可以用以下命令: chsh -s /bin/zsh 如过要切回默认终端bash, ...
- 三个php加密解密算法
三个功能强大的php加密解密函数 //加密函数 function lock_url($txt,$key='www.fyunw.com') { $chars = "ABCDEFGHIJKLMN ...
- wsdl详解
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http:// ...
- [转]oracle导入提示“IMP-00010:不是有效的导出文件,头部验证失败”的解决方案
这是由于导出的dmp文件与导入的数据库的版本不同造成的用Notepad++查看了dmp文件,在头部具修改成你将导入目标数据库的版本号以下对应的版本号: 11g R2:V11.02.00 11g R1: ...
- Django Ajax登录 防止CSRF
什么是CSRF 维基百科: 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CS ...
- 【Servlet和JSP-学习-1】基础知识
Servlet Session管理 Cookie 获取指定名称的Cookie 删除指定名称的Cookie JSP EL表达式 示例: 后台存入request中的属性值: JSP界面 JSTL 来自为知 ...
- bzoj1825: [JSOI2010]蔬菜庆典
Description Input Output 对于每组数据,输出一行.若蔬菜的总价能无限制增大,输出"+inf"(不含引号).否则输出一个整数,表示所有蔬菜的最大总价. 首 ...
- windows任务计划程序 坑