Java是一种静态类型的编程语言。Java代码中的每个变量的类型都需要显示地进行声明,所以所有的变量、方法的参数以及返回值等在程序运行前,它们的类型都是已经确定的。这种静态类型特性使编译器可以在编译时执行大量的检查来发现代码中的明显类型错误,但也给Java不够简洁和灵活。

近年来,动态类型语言如JavaScript、Ruby、Python、Groovy的流行,也反应了语言中的动态性的重要。于是Java提供了脚本语言支持的API。使脚本语言可以在JVM上运行。我们主要来以JavaScript来玩玩脚本语言在Java中的使用。

本文将分以下几个小节来学习:

  • Java的JavaScript脚本引擎
  • 脚本开发中涉及到的类和接口简介
  • 开发步骤
  • 脚本与java数据传递
  • 脚本执行上下文
  • 作用域
  • 方法的调用
  • 编译脚本

Java的JavaScript脚本引擎

Mozilla Rhino是一个完全使用Java语言编写的开源JavaScript实现。Rhino通常用于在Java程序中,为最终用户提供脚本化能力。Rhino(犀牛)这个名字来源于O'Reilly出版的著名的“犀牛书”JavaScript: The Definitive Guide(中文译名:JavaScript权威指南)。

Rhino 项目可以追溯到 1997 年,当时 Netscape 计划开发一个纯 Java 实现的 Navigator,为此需要一个 Java 实现的 JavaScript —— Javagator。它也就是 Rhino 的前身。起初 Rhino 将 JavaScript 编译成 Java 的二进制代码执行,这样它会有最好的性能。后来由于编译执行的方式存在垃圾收集的问题并且编译和装载过程的开销过大,不能满足一些项目的需求,Rhino 提供了解释执行的方式。随着 Rhino 开放源代码,越来越多的用户在自己的产品中使用了 Rhino,同时也有越来越多的开发者参与了 Rhino 的开发并做出了很大的贡献。如今 Rhino1.6R2 版本将被包含在 Java SE6 中发行,更多的 Java 开发者将从中获益。

脚本开发中涉及到的类和接口简介

在Java的嵌入式脚本开发中主要用的接口和类有ScriptEngineManager类、ScriptEngine接口、Bindings接口、ScriptContext接口。它们都位于javax.script包中。

  1. ScriptEngineManager 类的对象将作为各种基本引擎的管理器,其实是一个工厂,应为ScriptEngine都是这个工厂来生产的。
  2. ScriptEngine 接口的对象作为某种特定类型脚本的解释引擎,其中提供了一些用来执行脚本的方法。
  3. Bindings 接口的对象用于脚本和Java传递数据;
  4. ScriptContext 接口对象用户获取与脚本执行相关的信息;

开发步骤

  1. 创建ScriptEngineManager脚本引擎管理器/工厂对象;
  2. 生产引擎ScriptEngine接口对象;
  3. ScriptEngine对象执行脚本;

Demo:

package net.oseye;import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;public class ScriptTest {public static void main(String[] args) throws ScriptException {ScriptEngineManager factory=new ScriptEngineManager();ScriptEngine se=factory.getEngineByName("JavaScript");se.eval("println('脚本引擎测试')");}
}

输出:

脚本引擎测试

对上面代码的一点说明:

  • println是Rhino的输出函数,就如Java的System.out.Println;
  • ScriptEngineManager工厂管理器生产ScriptEngine有三种方式:
    //使用引擎名创建
    ScriptEngine engine = factory.getEngineByName ("JavaScript");
    //使用引擎扩展名创建
    ScriptEngine engine = factory.getEngineByExtension ("js");
    //使用引擎Mime类型创建
    ScriptEngine engine = factory.getEngineByMimeType ("application/javascript");  

  • ScriptEngine的执行函数eval有很多重载,如果要加载外部js文件可以这样:se.eval(new FileReader("ex.js"));

转载于:https://www.cnblogs.com/zhaiqianfeng/archive/2013/01/07/4618250.html

JAVA的嵌入式脚本开发(上)相关推荐

  1. JAVA的嵌入式脚本开发(中)

    本文将分以下几个小节来学习: Java的JavaScript脚本引擎 脚本开发中涉及到的类和接口简介 开发步骤 脚本与java数据传递 脚本执行上下文 作用域 方法的调用 编译脚本 脚本与java数据 ...

  2. jmeter的java测试框架_性能测试学习之路 (四)jmeter 脚本开发实战(JDBC JMS 接口脚本 轻量级接口自动化测试框架)...

    1.业务级脚本开发 登录脚本->思路:在线程组下新建两个HTTP请求,一个是完成访问登录页,一个是完成登录的数据提交. 步骤如下: 1) 访问登录页 2) 提交登录数据的HTTP PS:对于业务 ...

  3. java语言开发手机游戏_手机上的JAVA游戏和JAVA软件,是电脑上的JAVA语言编写的吗?他们之间有什么联系...

    手机上的JAVA游戏和JAVA软件,是电脑上的JAVA语言编写的吗?他们之间有什么联系以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起 ...

  4. java简单手机脚本编写,Java认证:Java平台上更简单的脚本编写方法

    本文向各位介绍一下Java性能监控小技巧:"JDK附带分析器.远程连接进程.跟踪统计.为离线分析创建一个堆转储.JConsole并不是高深莫测的." 现在,许多 Java 开发人员 ...

  5. Java版AVG游戏开发入门示例 3 ——脚本引擎的制作及应用

    源码下载地址:http://code.google.com/p/loon-simple/downloads/list 根据wikipedia的解释:脚本语言(Script language,scrip ...

  6. Java版AVG游戏开发入门示例[3]——脚本引擎的制作及应用

    源码下载地址:http://code.google.com/p/loon-simple/downloads/list 根据wikipedia的解释:脚本语言(Script language,scrip ...

  7. JMeter工具:常用协议脚本开发(BeanShell Sampler, Debug Sampler, FTP/Java/JDBC请求, JUnit request, SOAP/XML-RPC)

    目录 1. BeanShell Sampler 1.1 BeanShell Timer:BeanShell定时器 1.2 BeanShell PreProcessor:BeanShell前置处理器 1 ...

  8. 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南题八——MiniGUI 和其他嵌入式 Linux 上的图形及图形用户界面系统

    简介: 为了让读者对嵌入式 Linux 当中能够使用的图形及图形用户界面有个较为全面的认识,本文将为读者介绍一些嵌入式 Linux 系统中常见的图形及图形用户界面系统,并作为<基于 Linux ...

  9. java ug二次开发_使用Java进行UG二次开发:简单的例子(上) | 学步园

    最近因为要进行TeamCenter二次开发(胖客户端定制),所有要开始研究Java了.因此突发奇想为什么不能使用Java进行二次开发呢?现在对UG进行的开发以C/C++应用为主.大多数使用的是原来的U ...

最新文章

  1. Windows XP下,JDK环境变量配置
  2. 快春运了,做个火车余票查询接口,余票来源12306,图是百度地图
  3. 数据分析pandas属性实现统计分析
  4. C++:explicit关键字
  5. 小辣椒android密码怎样开,小辣椒手机忘记密码怎么恢复出厂设置
  6. 如何设置Mac允许远程电脑SSH登录?
  7. java中有无穷大吗_Java语言中有无穷大
  8. Chapter 6-Blurring Things Up之Do It Twice
  9. C语言段错误-core文件
  10. 乐视云盘电脑版 V3.1.0 官方最新版
  11. 2019-2020年数学建模竞赛心得体会
  12. javaWeb项目跑起来吧
  13. 关于使用https请求微信乱码问题
  14. LoadRunner 自动登录163邮箱
  15. 创业起步阶段需要注意什么?
  16. Derivation of matrix‘s eigenvalue and inverse matrix
  17. 英语不好怎么学python?这份python英语常用单词给我收好
  18. 动态规划------走楼梯问题
  19. tcp_tw_recycle引起的TCP握手失败
  20. App Cleaner Uninstaller for Mac v7.6 应用卸载工具

热门文章

  1. C语言C++中memset()函数使用和注意事项
  2. 在PyCharm命令行中使用conda数学库的方法
  3. ROS学习笔记5(理解ROS节点)
  4. 安装vue-cli脚手架
  5. Nervos DAO锁定总额突破100亿,近日解锁的14.28亿生态基金已被全部存入
  6. SAP License:SAP FI/CO—Questions and Answers
  7. 实操|风控规则的监控与自动化策略生成
  8. 手把手之stacking|分享集成模型在实际工作中的应用(上)
  9. 无人机综合管理系统/web端后台管理系统/设备管理/运维管理/维护管理/人员管理/维修保养/配件管理/保养管理/团队管理/axure后台管理原型/axure原型/web端后台管理原型/rp原型
  10. μC/OS-III---I笔记9---任务等待多个内核对象和任务内建信号量与消息队列