服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

让java动起来的脚本语言

只用了短短的10年时间,却好像已经成长了35年,java已经迅速在广泛的领域中找到了自己的位置:p2p、开放源代码、无线应用、嵌入式应用程序以及将要命名的某些应用。很难追踪java的具体方向,因为它在每个领域都正处于领导地位。

现在,让我们看看java领域中日益增长的脚本语言的影响。

关于快速开发

毋庸置疑,脚本语言,比如jython、python、ruby、perl和php正越来越流行。jython实际上是python编程语言的一个完整实现。它由100%的纯java语言写成,并且可以很方便地访问java类库。

这种脚本趋势正由于快速应用程序开发(rad,rapid application development)的发展而越来越扩大化。rad是一种开发风格,如今它正吸引着越来越多的拥护者。销售部经理给it部门施加了巨大的压力以便加速生产,it经理就不得不寻找更高效的方法来缩短研发生产时间。因此,rad自然成了最好的推动力。

infravio公司作为一个java和web服务的集成商,cto mukund balasubramanian 说:“通过某些脚本语言,你可以变得非常聪明并且能够完成常规java无法完成的很多事情。如果你知道如何利用一个好的脚本语言,你可以在开发中节省大量的时间和金钱。”

脚本语言的优势

快速开发。它们大大缩短了“开发、部署、测试、调试”周期。部署简便。大多提供即时部署能力,而无需花费大量时间在编译和打包周期上。与已有技术集成。它们大都构建在已有的组件技术,诸如java或者com上,以便有效重复利用现有代码。易于学习和使用。技术门槛很低,可以轻松找到大量的使用者。动态代码。脚本语言能够被即时生成和执行,这在某些应用程序中是非常必要和有用的高级特性(比如说,javascript中的动态类型)。

当然,java脚本语言也存在着一些缺点:凡事没有十全十美。它假定存在着一个“现实”的编程语言,比如说,找到内建在脚本语言中的数据库驱动器是件非常困难的事情。

对于软件工程和代码结构领域的熟练开发者来说,这不太有利。比如说面向对象和基于组件的开发环境。它们通常都不具有“一般性”,而是为某种特定的应用程序所产生,比如说php和互联网。“尽管如此,脚本语言可以加速软件开发的进程,并且将其扩展到一个巨大的领域。但是必须要注意的是选择特定的应用程序,比如说动态页面或者完成一个‘真实’的编程语言(如对于java而言就是jython)。”balasubramanian如是说。

第三方实用程序

通过基本框架帮助网格脚本,ibm的 bean scripting framework的应用程序使得将tcl、python、perl和其他脚本语言嵌入java应用程序相当简单。sun、borland、bea和其他厂商也提供类似应用程序。但是熟练的java开发者,比如mentro graphics公司的david kearns指出,支持一个脚本语言会有时间和费用上的风险,更不要说支持六个这样的语言了。

在最近《java world》的一篇文章中,kearns描述了在java应用程序中支持脚本会有的潜在风险。

“jython具有最快的脚本解释能力,同时具有强大的编程特性。”他说,“我最关注的其实是jython的控制流语法,对你来说也许重要,也许不重要。因为有新的领域要涵盖,为jython编写脚本或许比javascript和beanshell需要更长的学习周期。如果需要用python编写高级应用的脚本,我推荐去买本书。python是一个很流行的编程语言,所以书店中会有大量的书籍可供选购。”

其他java脚本语言

这里简单介绍一些其他被广泛使用的、与java相关的脚本语言。

beanshell。beanshell是用java写成的,一个小型的、免费的、可以下载的、嵌入式的java源代码解释器,具有对象脚本语言特性。

beanshell执行标准java语句和表达式,另外包括一些脚本命令和语法。它将脚本化对象看作简单闭包方法(simple method closure)来支持,就如同在perl和javascript中的一样。

可以将beanshell交互地用于java试验和调试,或者也可以将其当作简单的脚本引擎以用于你的应用程序。

简言之,beanshell是一个动态的解释型java,加上了一些有用的特性和功能。还有另外一种描述beanshell的方式:在很多方面,beanshell之于java就像tcl/tk之于c。beanshell是嵌入式的――你可以从java应用程序中调用beanshell,以便实时、动态地执行java代码,或者为应用程序提供扩展的脚本能力。

当然,也可以在beanshell中调用java应用程序和对象,动态地与java对象和api协同工作。既然beanshell是用java写成,并且在应用程序中的某处运行,那么就可以随意传送参数到脚本中的“实时”对象,并且将结果作为参数返回。

它具有以下的一些特点:使用java反射api以提供java语句和表达式的实时解释执行;可以透明地访问任何java对象和api;可以在命令行模式、控制台模式、小程序模式和远程线程服务器模式等四种模式下面运行。

与在应用程序中一样,可以在小程序中(applet)正常运行(无需编译器或者类装载器);解释器非常精简――jar文件大小为175k(如果去掉某些实用程序,那么就只剩下135k);纯java写成,并且是免费的!

jess是完全用java写成的规则引擎和脚本环境。jess的产生是受到clips专家系统的启发,但是其本身正逐渐成长为一个完备的、独特的、动态环境。使用jess,你可以构建java小应用程序,这些程序具有根据你以规则声明的形式所提供的知识来“推理”的能力。

jess非常小巧、灵活,并且是已知规则引擎中最快的。核心jess语言与clips依然兼容,许多jess脚本也是有效的clips脚本。与clips一样,jess使用rete运算法则来处理规则。rete是一个非常高效的算法,用于解决复杂、艰深的多对多匹配问题。在clips的基础上,jess添加了许多特性:后向链表、运行内存查询以及操作和直接推理java对象的能力。

jess同时也是一个强有力的java脚本环境。通过它你能够创建java对象、调用java方法而无需编译任何java代码。jess可以被授权用于商业应用,可以被免费用于学术研究。

judoscript是一种java类型的脚本,具有一系列特性:http客户端和服务器端编程、文件系统和归档、xml和xslt脚本、jdbc脚本以及html代码优化。

它同时带有以下功能:有监视器的调度程序、sendmail、可运行调试、java gui的创建、ftp、ssh和scp、windows注册表等等。该软件可被自由下载,并且包括源代码在内都是免费的。

judoscript是一种通用的、应用广泛的、java脚本语言。它由纯java设计和实现。它的设计包含了第三代和第四代语言的思想,不仅提供强大的编程支持,同时提供一种特殊的机制,被称之为“wysiwyg(所见即所得)”的编程方法。该机制如今已经非常流行,它使得编程工具的使用更加方便、高效,质量优异。这是一种高层次的语言,被集成进了一个健壮的、通用的java脚本环境中。

judoscript由lgpl(lesser gnu public license)发布,因此你可以随意使用它以及它的代码。当用于商业目的或者其他目的时,只要保留其最初的版权信息就可以。它会始终与最新的java开发保持同步,并且与更多lgpl或者gpl开发源代码java工程继承。原理很简单:如果有什么是有用和有效的,那么judoscript就力图使得它更加容易使用,并且很乐意使得它们具有脚本能力。

总之,如上这些java脚本语言解决问题的方式是提供相对小而灵活的引擎,强大的语言机制,极其庞大丰富的可复用模块。你基本上在java脚本语言的范畴之内搭建整个系统,脚本与核心对象浑然一体,解决问题直截了当,无须转弯抹角,无须看似精妙其实无奈的一大堆架构、模式。

java脚本语言一般实现了数据和程序的统一,基本不需要xml,程序易于变化,任何一处均可随时修改。语言的动态性也赋予你模拟领域语言的便利条件。结果便是,适应变化的能力大大增强,变化成本大大降低。很多以前的不可能将成为可能。

链接

jacl:如果你想要在tk脚本代码中创建用户界面元素,请访问swank project,它把java的swing部件封装到tk里面。发行版不包含jacl脚本的调试器。

jython:支持用python语法编写的脚本。python利用缩进层次表示代码块的结构,而不是象其他许多语言一样用花括号或开始-结束符号表示控制流程。至于这种改变究竟是好事还是坏事,这就要看你和用户的习惯了。发行版不包含jython脚本的调试器。

rhino:许多程序员总是把javascript和web页面编程关联起来,但这个版本的javascript不需要在浏览器中运行。在使用过程中,我没有发现任何问题。它的发行版带有一个简单但实用的脚本调试器。

beanshell:java程序员很快会对这个源代码解释器产生一种亲切的感觉。beanshell的文档写得很不错,但开发组很小。然而,只有当beanshell的开发者改变了他们的兴趣,却又没有其他人填补他们转换兴趣后留下的空白时,开发组太小才会成为一个问题。它的发行版不包含beanshell脚本调试器。

扫描关注微信公众号