1. import java.io.FileNotFoundException;
  2. import java.io.FileReader;
  3. import java.util.List;
  4.  
  5. import javax.print.DocFlavor.URL;
  6. import javax.script.Invocable;
  7. import javax.script.ScriptEngine;
  8. import javax.script.ScriptEngineManager;
  9. import javax.script.ScriptException;
  10.  
  11. @SuppressWarnings("all") //压制所有的警告
  12. public class Engine_GetRhino {
  13.  
  14. public static void main(String[] args) {
  15. // TODO Auto-generated method stub
  16. //获得脚本引擎
  17. ScriptEngineManager sem = new ScriptEngineManager();
  18. ScriptEngine engine=sem.getEngineByName("javascript");
  19.  
  20. //定义变量,存储到引擎的上下文
  21. engine.put("msg", "you are very good");
  22.  
  23. String str = "var user = {name:'waibizi',age:18,schools:['肇庆学院','计算机学院']};";
  24. str += "print(user.name);";
  25.  
  26. //执行脚本
  27. try {
  28. engine.eval(str);
  29. engine.eval("msg='you are very bad';");
  30. } catch (ScriptException e) {
  31. // TODO Auto-generated catch block
  32. e.printStackTrace();
  33. }
  34.  
  35. //测试输出
  36. System.out.println(engine.get("msg"));
  37.  
  38. try {
  39. //定义函数
  40. engine.eval("function add(a,b){var sum = a + b; return sum;}");
  41. engine.eval("function add1(){var sum = 123 + 321; return sum;}");
  42. //执行函数
  43. Invocable jsInvoke = (Invocable) engine;
  44. Object result=jsInvoke.invokeFunction("add", new Object[] {15,13}); //指定函数赋值
  45. Object result1=jsInvoke.invokeFunction("add1"); //指定函数赋值
  46. System.out.println(result);
  47. System.out.println(result1);
  48.  
  49. } catch (Exception e) {
  50. // TODO Auto-generated catch block
  51. e.printStackTrace();
  52. }
  53.  
  54. try {
  55. //js导入java的包,使用java的类
  56.  
  57. // 以下注释掉的代码是JDK1.6的,先已经抛弃了,看下面没注释的
  58. // String jsCode = "importPackage(java.util); var list=Arrays.asList([\"肇庆学院\",\"计算机学院\",\"软件工程\"]);";
  59.  
  60. String jsCode = "var list=java.util.Arrays.asList([\"肇庆学院\",\"计算机学院\",\"软件工程\"]);";
  61. engine.eval(jsCode);
  62. List list = (List) engine.get("list");
  63. for(int i=0;i<list.size();i++) {
  64. System.out.println(list.get(i));
  65. }
  66. } catch (Exception e) {
  67. // TODO Auto-generated catch block
  68. e.printStackTrace();
  69. }
  70.  
  71. try {
  72. java.net.URL url = Engine_GetRhino.class.getClassLoader().getResource("demo.js");
  73. FileReader fr = new FileReader(url.getPath());
  74. engine.eval(fr);
  75. fr.close(); //由于只是测试,就不那么规范了。大家实际用时要使用try catch finally!
  76. } catch (Exception e) {
  77. // TODO Auto-generated catch block
  78. e.printStackTrace();
  79. }
  80.  
  81. }
  82.  
  83. }

 a.js如下

  1. function test(){
  2. var a=666;
  3. print("invoke js file:"+a);
  4. }
  5.  
  6. test();

  

Java引擎的更多相关文章

  1. [Drools]JAVA规则引擎 -- Drools- 转http://blog.csdn.net/quzishen/article/details/6163012

    [Drools]JAVA规则引擎 -- Drools 标签: java引擎exceptiongetterstringsetter 2011-01-25 14:33 113340人阅读 评论(35) 收 ...

  2. Apache OFBiz 学习笔记 之 服务引擎 一

    概述     服务定义为一段独立的逻辑顺序,当多个服务组合一起时可完成不同类型的业务需求     服务有很多类型,WorkFlow.Rules.Java.SOAP.BeanShell等.java类型的 ...

  3. java开发工具比较(16个工具修订版)

    1.JDK (Java Development Kit)Java开发工具集 SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的Java开发工具集(JDK).开发人员和最终用户可以利 ...

  4. 架构选型之Nodejs与Java

    前言: 身边越来越多的同事谈论Nodejs,谈其异步IO.事件回调.前后台统一一门语言,创业的朋友的第一个创业项目也选择了Nodejs,期望能够使用一种语言节省成本快速完成需求开发.与其他项目组的同事 ...

  5. Android游戏引擎总汇 原文出处:http://software.intel.com/en-us/blogs/2012/03/13/game-engines-for-android?page=1

    随着Android系统的使用越来越广泛,了解一下Android平台下的游戏引擎就非常有必要.而同时因为基于Intel x86的移动设备越来越多,我也非常关注支持x86的移动游戏引擎.然而就目前为止游戏 ...

  6. 《JAVA与模式》之备忘录模式

    一.备忘录(Memento)模式结构 备忘录对象是一个用来存储另外一个对象内部状态的快照(snapshot)的对象.备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来, ...

  7. 十四种Java开发工具点评

    在计算机开发语言的历史中,从来没有哪种语言象Java那样受到如此众多厂商的支持,有如此多的开发工具,Java菜鸟们如初入大观园的刘姥姥,看花了眼,不知该何种选择.的确,这些工具各有所长,都没有绝对完美 ...

  8. Java开发工具全面比较

    1.JDK (Java Development Kit)Java开发工具集 从初学者角度来看Java开发工具,采用JDK开发Java程序能够很快理解程序中各部分代码之间的关系,有利于理解Java面向对 ...

  9. JAVA程序员常用开发工具

    1.JDK (Java Development Kit)Java开发工具集 SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的Java开发工具集(JDK).开发人员和最终用户可以利 ...

随机推荐

  1. win10下以管理员身份打开hosts文件

    第一步: 第二步: 第三步:先后执行两个命令cmd        notepad hosts 最后一步:在记事本中修改host文件

  2. PAT (Basic Level) Practice (中文)1022 D进制的A+B (20 分)

    输入两个非负 10 进制整数 A 和 B (≤),输出 A+B 的 D (1)进制数. 输入格式: 输入在一行中依次给出 3 个整数 A.B 和 D. 输出格式: 输出 A+B 的 D 进制数. 输入 ...

  3. Selenium3+python自动化014-自动化常用设计模式页面对象模型 (Page Object)

    一.概 念: PO(Page Object)设计模式是一种面向对象(页面对象)的设计模式,将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理. 二.优点可以使代码复用,降低维 ...

  4. MySQL数据库优化(一)

    1.1.1. 慢查询日志当查询超过一定的时间没有返回结果的时候,才会记录到慢查询日志中.默认不开启.采样的时候手工开启.可以帮助我们找出执行慢的 SQL 语句查看慢 SQL 日志是否启用(on 表示启 ...

  5. c#快速热身

    一.选择结构: 1. if选择结构 2. if-else选择结构 3. if-else if-else if-else多重if选择结构 4. if-if-else-else 嵌套if选择结构 5. s ...

  6. 你写的 Python 代码总是不规范?用它!

    今天咱们来说说 代码风格 ! 不同的编程语言 有不同的代码风格 ​ ​ ​ ​ ​ Python 的代码规范 就是人们常说的 PEP8 ​ ​ 在这个网站 https://www.python.org ...

  7. pip 更换镜像源

    国内的pip源 阿里云:https://mirrors.aliyun.com/pypi/simple/ 清华:https://pypi.tuna.tsinghua.edu.cn/simple 中国科技 ...

  8. python数据分析学习(2)pandas二维工具DataFrame讲解

    目录 二:pandas数据结构介绍   下面继续讲解pandas的第二个工具DataFrame. 二:pandas数据结构介绍 2.DataFarme   DataFarme表示的是矩阵的数据表,包含 ...

  9. C++->以读或写方式打开一个文件

    以读或写方式打开一个文件 #include<iostream.h>   //.h以C|非C标准引用库文件 #include<fstream.h> #include<std ...

  10. 假期学习【八】首都之窗百姓信件爬虫(完整版)2020.2.6 Python

    时间:2020.2.6 今天把昨天做到一半的首都之窗百姓信件爬取完成了. 源码如下: import requests import io from bs4 import BeautifulSoup # ...