java实战晋级技巧(五)调用js代码

举报
小鲍侃java 发表于 2021/09/09 23:04:22 2021/09/09
【摘要】 jdk8里使用脚本引擎调用js 1.定义一个js方法: function getRouteInfo(province){ //注意,参数不要带var。。在java里执行会报错。。 if (province=='henan') return 'http://127.0.0.1/resweb'; ...

jdk8里使用脚本引擎调用js

1.定义一个js方法:


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

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


  
  1. import javax.script.Invocable;
  2. import javax.script.ScriptEngine;
  3. import javax.script.ScriptEngineManager;
  4. import javax.script.ScriptException;
  5. import java.io.StringReader;
  6. public class TestJs {
  7. public static void main(String args[]) {
  8. // js function:getRouteInfo,入参为province
  9. // 参数不要带var。。不然后面执行方法的时候会报错。。
  10. String routeScript = "function getRouteInfo(province){ \n" + " if (province=='henan') "
  11. + " return 'http://127.0.0.1/resweb';\n" + " else "
  12. + " return '未找到对应的省份信息,province='+province;\n" + "}";
  13. // 脚本的执行结果
  14. String scriptResult = "";
  15. // 1.得到脚本引擎
  16. ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
  17. try {
  18. // 2.引擎读取 脚本字符串
  19. engine.eval(new StringReader(routeScript));
  20. // 如果js存在文件里,举例
  21. // Resource aesJs = new ClassPathResource("js/aes.js");
  22. // this.engine.eval(new FileReader(aesJs.getFile()));
  23. // 3.将引擎转换为Invocable,这样才可以掉用js的方法
  24. Invocable invocable = (Invocable)engine;
  25. // 4.使用 invocable.invokeFunction掉用js脚本里的方法,第一個参数为方法名,后面的参数为被调用的js方法的入参
  26. scriptResult = (String)invocable.invokeFunction("getRouteInfo", "henan1");
  27. } catch (ScriptException e) {
  28. e.printStackTrace();
  29. System.out.println("Error executing script: " + e.getMessage() + " script:[" + routeScript + "]");
  30. } catch (NoSuchMethodException e) {
  31. e.printStackTrace();
  32. System.out.println("Error executing script,为找到需要的方法: " + e.getMessage() + " script:[" + routeScript + "]");
  33. }
  34. System.out.println(scriptResult.toString());
  35. }
  36. }

3.运行测试结果为:

未找到对应的省份信息,province=henan1

文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。

原文链接:baocl.blog.csdn.net/article/details/107330548

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。