本文研究的主要是Java编程Nashorn的相关内容,具体如下。

Nashorn是什么

Nashorn,发音“nass-horn”,是德国二战时一个坦克的命名,同时也是java8新一代的javascript引擎--替代老旧,缓慢的Rhino,符合 ECMAScript-262 5.1 版语言规范。你可能想javascript是运行在web浏览器,提供对html各种dom操作,但是Nashorn不支持浏览器DOM的对象。这个需要注意的一个点。

之前学习Java8的时候恰好写了个简单的例子,所以放在这里记录一下。

文件目录:

StringFunction.java,字符串功能类

StringNashorn.java,封装脚本引擎

NashornTest.java,测试引擎,引擎调用

StringFunction.java源码:

public class StringFunction {

/**

* 字符串截取

*/

public String sub(String str, int start, int end) {

return str.substring(start, end);

}

/**

* 字符串拼接

*/

public String append(String... strs) {

StringBuilder result = new StringBuilder(strs[0]);

Stream.of(strs).skip(1).forEach(str -> result.append(str));

return result.toString();

}

}

StringNashorn.java源码:

public class StringNashorn {

/**

* Nashorn脚本引擎

*/

private ScriptEngine nashorn = new ScriptEngineManager().getEngineByName("nashorn");

/**

* 执行脚本

*/

public Object execute(String script) {

ScriptContext scriptContext = new SimpleScriptContext();

// 定义一个名为stringfunction的函数,这个函数实际对应着一个StringFunction对象

scriptContext.setAttribute("stringfunction", new StringFunction(), 100);

nashorn.setContext(scriptContext);

Object result = null;

try {

result = nashorn.eval(script);

} catch (ScriptException e) {

e.printStackTrace();

}

return result;

}

}

NashornTest.java源码:

public class NashornTest {

public static void main(String[] args) {

String substring = "stringfunction.sub(\"abcdefghijk\", 1, 4);";

String append = "stringfunction.append(\"abc\", \"def\");";

StringNashorn nashorn = new StringNashorn();

Object subResult = nashorn.execute(substring);

Object appendResult = nashorn.execute(append);

System.out.println(subResult.toString());

System.out.println(appendResult.toString());

}

}

运行main方法,运行结果:

bcd

abcdef

这里如果NashornTest.java改写如下:

public class NashornTest {

public static void main(String[] args) {

// 脚本内用对象接收结果并打印

String substring = "var s1 = stringfunction.sub(\"abcdefghijk\", 1, 4);"

+ " print(s1);";

String append = "var s2 = stringfunction.append(\"abc\", \"def\");"

+ " print(s2);";

StringNashorn nashorn = new StringNashorn();

// 这里execute不再返回对象,因为在脚本里面已经有对象接收sub和append的执行结果。

nashorn.execute(substring);

nashorn.execute(append);

}

}

同样也会输出相同的结果。

总结

以上就是本文关于Java编程Nashorn实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

java nashorn_Java编程Nashorn实例代码相关推荐

  1. java网络编程实例_关于java网络编程的实例代码

    服务器端的写法 package com.chinasofti.corejava.ch22; import java.io.BufferedReader; import java.io.IOExcept ...

  2. 关于java网络编程的实例代码

    服务器端的写法 package com.chinasofti.corejava.ch22; import java.io.BufferedReader; import java.io.IOExcept ...

  3. Java并发编程最佳实例详解系列

    Java并发编程最佳实例详解系列: Java并发编程(一)线程定义.状态和属性 Java并发编程(一)线程定义.状态和属性 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.在java语言中, ...

  4. java 摄像头 win7_Win7系统下JAVA摄像头调用_实例代码介绍

    Win7系统下JAVA摄像头调用_实例代码介绍.由于要搞个人脸识别登录(JAVACV),百度谷歌了一下午,找了网上简单的样例代码来试,可是老是调试不过,出现CaptureDeviceManager.g ...

  5. unity调用普通java类_Unity中C#和Java的相互调用实例代码

    1.通过C#调用Java的方法: 在C#中添加调用的一些代码,利用Unity提供的一些接口实现调用Java! private const string JAVA_CLASS_Name = " ...

  6. linux java 获取路径怎么写_linux中java获取路径的实例代码

    linux中java获取路径怎么写? 在Unix/Linux中,路径的分隔采用正斜"/",比如"cd /home/java". 在java的代码开发中 \ 是代 ...

  7. java 重构函数_包会,教你用Java函数式编程重构烂代码

    Java8 由Oracle在2014年发布,是继Java5之后最具革命性的版本. Java8吸收其他语言的精髓带来了函数式编程,lambda表达式,Stream流等一系列新特性,学会了这些新特性,可以 ...

  8. Java多线程编程系列-实例变量和线程安全

    导语   上面说到了多线程的简单实现,编写了几个入门的小例子,这里我们来研究一下关于实例变量和线程安全的问题.在自定义的线程类中的实例变量针对其他线程可以有共享和不共享之分,下多个线程之间进行交互的时 ...

  9. JAVA 网络编程流相关代码(UDP和TCP)

    UDP传输 UDP传输示例代码1 功能需求:通过udp传输方式,将一段文字数据发送出去. 定义一个udp发送端. 思路: 1,建立updsocket服务. 2,提供数据,并将数据封装到数据包中. 3, ...

最新文章

  1. OTSU算法(也称最大类间差法,有时也称之为大津算法)
  2. 并发测试工具_软件测试工程师都在用哪些测试工具?
  3. linux 路由 route命令
  4. typora 公式对齐_都0202年了还不会用 Typora——看Typora使用教程这篇就够了
  5. 每天一道机器学习算法面试题目
  6. unity Console窗口的输出
  7. Hive环境搭建及测试
  8. 00-各种工具下载链接汇总
  9. 志强:微商微信如何引流加人?
  10. MPEG4标准中的Advanced Simple Profile(ASP)完整的说明-01-02章
  11. 单龙芯3A3000-7A1000PMON研究学习-(23)撸起袖子干-分析代码前的准备工作5
  12. 富有哲理的10则故事(必读经典)
  13. mongodb备份oplog_Mongodb 之 oplog进行数据备份恢复
  14. 携程Java后台开发三面面经
  15. 004-2018-09-06 列表
  16. error LINK2005: XXXX已经在 .obj 中定义
  17. matlab rand randn 每次生成的随机数都一样的解决方案
  18. 数据分析案例-旅游景点票价预测
  19. linux下的串口通信
  20. 透明网关配置修改后服务器要重启吗,透明网关配置修改后服务器要重启吗

热门文章

  1. Java如何实现文档在线预览
  2. mysql分区表使用
  3. 用Python代码写首《本草纲目》
  4. Python基础知识思维导图
  5. MySQL讲义第 55 讲——用户权限管理之创建和删除用户
  6. 微信小程序踩坑日记-微信小程序首次加载样式错乱问题
  7. git 撤销刚才的rebase_撤消git rebase
  8. php商城系统文和答题_基于PHP的网上商城系统分析和设计
  9. 网络原理(一):初识网络
  10. CentOS宝塔挂载新硬盘