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 ...
随机推荐
- (精)AVL树旋转共8种情况(涵盖所有考研的范围)
- 龙儿经理嘴上经常说的B树
国内的数据结构教材一般是按照Knuth定义,即“阶”定义为一个节点的子节点数目的最大值. 对于一棵m阶B-tree,每个结点至多可以拥有m个子结点.各结点的关键字和可以拥有的子结点数都有限制 规定m阶 ...
- ereg()替换为preg_match(),ereg_repalce替换为preg_replace得加斜杠
PHP 5.3 ereg() 无法正常使用,提示“Function ereg() is deprecated Error”是因为它长ereg 函数进行了升级处理,需要像preg_match使用/ /来 ...
- nyoj 幸运三角形
幸运三角形 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 话说有这么一个图形,只有两种符号组成(‘+’或者‘-’),图形的最上层有n个符号,往下个数依次减一,形成倒 ...
- idea引入svn
刚想在idea看一个svn的项目代码,结果发现导入项目后,idea在右下角弹出了Event Log窗口,里面的红色小字 Can't use Subversion command line client ...
- 如何在eclipse中安装angularjs插件
1,首先,在eclipse中使用angularjs的时候,由于没有相应的提示,导致在开发的时候给我们带来了很多的不便,需要在这上面耗费一些时间.那么这时候我们都在想可不可以让eclipse也和一些前端 ...
- 【Spring学习笔记-MVC-12】Spring MVC视图解析器之ResourceBundleViewResolver
场景 当我们设计程序界面的时候,中国人希望界面是中文,而美国人希望界面是英文. 我们当然希望后台代码不需改变,系统能够通过配置文件配置,来自己觉得是显示中文界面还是英文界面. 这是,Spring mv ...
- Spring AOP的注解方式实现
spring也支持注解方式实现AOP,相对于配置文件方式,注解配置更加的轻量级,配置.修改更加方便. 1.开启AOP的注解配置方式 <!-- 开启aop属性注解 --> <aop:a ...
- ASP.NET Web Pages:全局页面
ylbtech-.Net-ASP.NET Web Pages:全局页面 1.返回顶部 1. ASP.NET Web Pages - 全局页面 本章介绍全局页面 AppStart 和 PageStart ...
- VMware新建虚拟机
VMware作为一个非常便捷的虚拟机软件,学会简单的使用方法,对试验非常有帮助. 1. 打开VM,选择“创建新的虚拟机” 2. 选择典型: 3. 选择稍后选择安装源: 4. 选择Linux,并选择Li ...