jdk8里使用脚本引擎调用js

1.定义一个js方法:

function getRouteInfo(province){ //注意,参数不要带var。。在java里执行会报错。。
if (province=='henan')
return 'http://127.0.0.1/resweb';
else
return '未找到对应的省份信息,province='+province;
}

2. 写一个java 测试类来 调用上面的js方法

/**
* Created by codeya on 2018/3/2.
*/
import java.io.StringReader;
import javax.script.Invocable;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
public class Test {
public static void main(String args[]){ //js function:getRouteInfo,入参为province
String routeScript="function getRouteInfo(province){ \n" + // 参数不要带var。。不然后面执行方法的时候会报错。。
" if (province=='henan') " +
" return 'http://127.0.0.1/resweb';\n" +
" else " +
" return '未找到对应的省份信息,province='+province;\n" +
"}"; String scriptResult ="";//脚本的执行结果 ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");//1.得到脚本引擎
try {
//2.引擎读取 脚本字符串
engine.eval(new StringReader(routeScript));
//如果js存在文件里,举例
// Resource aesJs = new ClassPathResource("js/aes.js");
// this.engine.eval(new FileReader(aesJs.getFile())); //3.将引擎转换为Invocable,这样才可以掉用js的方法
Invocable invocable = (Invocable) engine; //4.使用 invocable.invokeFunction掉用js脚本里的方法,第一個参数为方法名,后面的参数为被调用的js方法的入参
scriptResult = (String) invocable.invokeFunction("getRouteInfo", "henan"); }catch(ScriptException e){
e.printStackTrace();
System.out.println("Error executing script: "+ e.getMessage()+" script:["+routeScript+"]");
} catch (NoSuchMethodException e) {
e.printStackTrace();
System.out.println("Error executing script,为找到需要的方法: "+ e.getMessage()+" script:["+routeScript+"]");
}
System.out.println(scriptResult.toString());
}
}

3.运行测试结果为:

http://127.0.0.1/resweb

说明调用成功了。。

参考文档:

Java 8 Nashorn 教程 :https://segmentfault.com/a/1190000006041626 这篇文章里也写了js调用java

http://www.colabug.com/2380506.html Java爬虫入门篇(二)Java 8 Nashorn 动态执行js脚本

最新文章

  1. Mvc利用淘宝Kissy uploader实现图片批量上传附带瀑布流的照片墙
  2. POJ3749 破译密码
  3. leetcode98 Validate Binary Search Tree
  4. Linux/Unix里,ln -s
  5. erp中三大订单CO、PO、MO各是代表什么?
  6. Spring 配置中的 default-lazy-init属性
  7. android与javascript相互调用
  8. Java 多字段排序Comparator(兼容Date,Integer,Doubel,Long)
  9. 菜鸟玩云计算之十六:Ubuntu14.04上创建的虚拟机迁移到RHEL6.4
  10. [statsvn]-svn代码量统计
  11. EC读书笔记系列之17:条款41、42、43、44、45、46
  12. hadoop笔记之Hive的管理(CLI方式)
  13. Day2 - Python基础2习题集
  14. 百度BAE环境搭建
  15. Docker Centos7 下建立 Docker 桥接网络
  16. asp.net core选项配置的研究
  17. 操作系统,时间片轮转算法的C语言实现Round Robin
  18. Balanced Sequence HDU - 6299(杭电多校1 B)
  19. mysql 线程等待时间,解决sleep进程过多的办法
  20. ElectronNetTest

热门文章

  1. 【题解】NOI 系列题解总集
  2. CSP-S2020 DP专项训练
  3. win+mac全网视频无水印采集工具
  4. MySQL增强半同步的搭建实验,和一些参数的个人理解
  5. gnuplot中的一些技巧
  6. PHP字符串你不知道的事
  7. RocketMQ集群搭建(3m-3s-async)
  8. css进阶 07-CSS面试题
  9. burp中获取token进行暴力破解
  10. Python:值得学习的二十个技巧