脚本语言因其方便、简洁等特性越来越受到关注,如javascript和groovy。在某些时候,使用脚本语言完成和java一样的功能时会编写得更快更方便,拿java中列表来说,使用java代码和groovy代码的比较如下:
// 这是java代码
List<String> list = new ArrayList<String>();
list.add("obj1");
list.add("obj2");
// 这是groovy代码
list = ["obj1", "ojb2"];
可以看到,脚本语言更加简洁快速。脚本语言往往是解释性的语言,因此在运行期间动态更改更加利于我们进行测试而无须编译。所以,在需要进行快速编写和频繁修改的前提下,脚本语言的优势得以体现。java从1.6开始就已经将脚本语言的支持加入到标准API中来了,在javax.script包中可以看到该脚本框架的所有功能。如果有用过BSF的话,相信对脚本框架也应该相对比较熟悉了,java脚本语言框架提供的主要功能有:
1、使用ScriptEngine标准接口来执行脚本语言(包括代码段、函数、获取返回值等)
该接口是主要的使用接口,可以通过字符串、文件来执行给定的脚本并获取返回值。背后是各个脚本语言引擎的实现
2、使用Binds和ScriptContext提供java和脚本语言间的参数传递(支持命名空间)
对每个脚本引擎而言都有独立的命名空间来进行参数传递,同时也提供全局的命名空间和自定义命名空间。java程序和脚本语言可以通过命名空间相互传递参数
3、提供对脚本语言的编译/解析缓存(如groovy)以提高执行效率
这是针对实现了Compilable接口的引擎而言的,可以用来缓存编译/解析结果以提供重复执行的效率。比如groovy可以将代码编译为java字节码来执行,效率提高是非常明显的。
4、其他功能
其实我们使用前3个主要功能就够了,足可以满足我们在java程序中使用脚本语言的便利。java1.6版的JRE已经自带了javascript脚本语言的实现引擎,采用的是ECMAScript规范的实现Mozilla Rhino。因此,默认我们就可以使用脚本框架在java程序中执行和调用javascript代码了。对于javascript而言,和我们平常在浏览器中使用的基本上都一样,因为都是兼容ECMAScript规范的。有区别的是浏览器中的javascript扩展了可以对DOM对象操作的功能,这是ECMAScript规范中没有的,所以不用指望可以使用类似alert等这样的方言功能了(所有window对象的属性和方法都不可用用的)。
使用脚本框架执行javascript是非常简单的,举个简单的例子如下,只需要3个步骤就可以:
// 脚本引擎管理器,用来动态查找所有的脚本引擎
ScriptEngineManager sem = new ScriptEngineManager();
// 获取js引擎
ScriptEngine jsEngine = sem.getEngineByExtension("js");
// 执行一个js中的打印方法
jsEngine.eval("println('Hello world')");
ScriptEngineManager的动态查找方式是:搜索classpath路径中的所有jar文件,并读取jar文件中
/META-INF/services/javax.script.ScriptEngineFactory文件的内容,该文件就是指定了实现ScriptEngineFactory接口的
实现类。我们可以在jre/lib/resources.jar文件中找到javascript引擎的实现注册。
ScriptEngine负责执行脚本,我们这里使用的是字符串,还可以是Reader对象从流中读取脚本内容。我们写一个js文件存放在类目录下,名称为js-1.js:
var array = [12,13,15,16,18];
for (var i = 0; i < array.length; i ++) {
println("index:" + i + ",value:" + array[i]);
}
var obj = {};
obj.a = 'i am a';
obj.b = 'i am b';
for (var p in obj) {
println("Attribute:" + p + ",value:" + obj[p]);
}
然后写如下java代码保存在ScriptDemo类文件中执行:
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine jsEngine = sem.getEngineByExtension("js");
jsEngine.eval(new InputStreamReader(ScriptDemo.class.getResourceAsStream("js-1.js")));
运行后,我们就可以在控制台打印我们想要的结果了。如果想使用其他脚本语言的支持,直接将其实现了java脚本框架的jar包扔到classpath中即可。比如groovy的发行包已经实现了该规范,只需要将其发行包放入到classpath中然后调用即可。
时间原因,暂时就写这么多吧,后面再慢慢补其他特性。。。
分享到:
- 2009-09-08 17:04
- 浏览 2462
- 评论(1)
- 论坛回复 / 浏览 (1 / 2514)
- 查看更多
相关推荐
资源名称:Java脚本编程:语言框架与模式内容简介:《Sun公司核心技术丛书·Java脚本编程语言、框架与模式》讲解了脚本语言的基本概念和使用方法,概括了Java开发人员可以使用的解决方案,并探讨了在Java应用程序中...
项目标题:高效配置的Java SSM框架应用源码 技术栈:主要采用Java语言,辅以CSS和JavaScript进行界面优化与交互。 文件构成:项目共包含40个文件,具体分布如下: - Java源文件:10个,涉及核心业务逻辑及配置实现...
本资源提供了一套基于Java和SSM框架的leave-ssm7应用程序设计源码,包含44个文件,其中包括13个Java源代码文件,9个XML配置文件,9个JSP页面文件,4个JPEG图片文件,2个Git忽略文件,2个CSS样式文件,2个JavaScript...
这些支持框架能够让你的Java应用在不作大量修改的情况下,运行Tcl、Python和其他语言编写的脚本。 在Java应用中集成了脚本解释器之后,用户编写的脚本能够直接引用Java应用的类,就如这些脚本属于Java程序的一部分...
项目名称:Java SSM框架集成日志功能增强Demo 主要编程语言:Java ...项目利用Java动态代理机制,通过实现InvocationHandler接口,巧妙地运用AOP(面向切面编程)实现了日志功能,增强了应用的可追踪性与维护性。
Java 项目,包含:项目源码、数据库脚本、部署说明等,前后端代码都在里面 。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 一. 技术组成 技术栈:Java,使用 jdk1.8 即可 ...
JSF是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。JSF(Java Server Faces)技术为开发基于网络用户界面的Java开发者提供了标准的编程接口API以及标签库。就像Struts框架...
JAVA多服务器通讯框架是基于NIO开发的Socket通讯框架,实现了客户端和服务器,服务器与服务器之间的通讯功能,适合应用于大型聊天服务器,大型游戏服务器。 本演示程序实现了一个基本的命令行聊天功能,以演示...
本资源提供了一套基于Java和SSH的企业级Web应用开发框架设计源码,包含2438个文件,其中包括672个JavaScript脚本文件,456个PNG图片文件,354个Java源代码文件,172个GIF图片文件,122个CSS样式文件,101个JSP页面...
凤凰框架继承了主流框架的特点,应用于大型网站及基于Web的应用。其开发目标是稳定,独立,精炼,简便 相对于117解决了以下问题 * 安全过滤器中屏蔽掉一处跨站脚本攻击的漏洞 * 如果文件没有日志信息,则不执行...
项目概述: 本项目是一个基于Java Configure配置的高效SSM框架完整源码实现。主要采用Java语言开发,辅以CSS和...简而言之,本项目提供了一套结构清晰、配置高效的SSM框架源码,方便开发者快速构建Java应用程序。
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
JGraphEd 是一个 Java 的图形编辑应用和绘图框架。 Java 穿越NAT方案 JSTUN.tar JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...
Java 脚本 API 是一种独立于框架的脚本语言,使用来自于Java代码的脚本引擎 。可以使用Java语言编写定制/可扩展的应用程序并将自定义脚本语言选择留给最终用户 。下面我们来详细了解一下吧
本文将介绍如何使用SSM框架搭建一个药品管理系统。 1. 技术栈选择和环境搭建 后端框架:选择SSM框架,即Spring+Spring MVC+MyBatis,用于实现后端业务逻辑和数据库操作。 前端框架:选择合适的前端框架,如Bootstrap...