一、背景
利用Java语言编写系统的时候,经常会遇到业务需求的变更而导致修改代码,甚至有些时候还需要修改核心代码(如果整个系统架构设计的不合理的话)。为了避免这种问题,在Java编程的时候,我们应该将易变业务使用脚本语言编写。
Java世界一直在遭受着“异族”的入侵,比如PHP、Ruby、Groovy、JavaScript等,这些入侵者都有一个共同的特征:全是同一类语言——脚本语言,它们都是在运行期间解释执行的。为什么Java这种强编译型的语言会需要这些脚本语言呢?这是因为脚本语言的三大特点:灵活、便捷、简单。
二、脚本语言特征的简述
上一节提出了脚本语言的三大特征,这一节就这三大特征作一个简单的描述。
灵活:脚本语言一般都是动态类型,可以不用声明类型而直接使用,也可以的在运行期间改变类型。
便捷:脚本语言是一种解释型语言,不需要经过编译成二进制代码,也不需要像Java一样生成字节码。它的执行是依靠解释器解释的,因此在运行期间变更代码非常容易,而且不用停止应用。
简单:关于这一特征,只能说只有部分脚本语言适用,比如Groovy,Java程序员若转到Groovy程序语言上,只需要两个小时,看完语法说明,看完Demo即可以适用了,没有太多的技术门槛。
三、Java程序中使用脚本语言
脚本语言的这些特征是Java所没有的,引入脚本语言可以是Java更加强大,于是Java 6开始正式支持脚本语言。但是因为脚本语言的种类比较多,Java开发者也很难确定该支持哪种脚本语言,因而JCP(Java Community Process)提出了JSR223规范,只要符合该规范的脚本语言,都可以在Java平台上运行(该规范对JavaScript是默认支持的)。
四、实例分析
编写一个简单的模型计算公式,用来观察一下脚本语言是如何“拥抱变化”的。
1、编写JS脚本文件:demo.js,将此文件保存在本地的某个目录下。例如,我保存的路径是D:\learn\demo.js
function fomulate(var1,var2){ return var1 * var2 + factor; }
2、编写Java程序:ScriptIntoJava.java,此类用来观察运行结果。
import java.io.FileReader; import java.util.Scanner; import javax.script.Bindings; import javax.script.Invocable; import javax.script.ScriptContext; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class ScriptIntoJava { @SuppressWarnings("resource") public static void main(String[] args) throws Exception{ //获取一个JavaScript执行引擎 ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("javascript"); //建立上下文变量 Bindings bind = scriptEngine.createBindings(); bind.put("factor", 1); //绑定上下文,作用域是当前引擎范围 scriptEngine.setBindings(bind, ScriptContext.ENGINE_SCOPE); Scanner input = new Scanner(System.in); while(input.hasNext()){ int first = input.nextInt(); int second = input.nextInt(); System.out.println("输入参数是:" + first + ", " + second); //读取JS脚本文件 scriptEngine.eval(new FileReader("D:/learn/demo.js")); //是否可调用方法 if(scriptEngine instanceof Invocable){ Invocable in = (Invocable)scriptEngine; //执行JS中的函数 Double result = (Double)in.invokeFunction("fomulate", first,second); System.out.println("运算结果:" + result.intValue()); } } } }
3、第一次运行,如下所示:
1
2
输入参数是:1, 2
运算结果:3
其中蓝色的是在控制台输入的参数。
现在,直接修改demo.js中的方法,保持JVM是运行状态,修改后的文件内容如下:
function fomulate(var1,var2){ return var1 * var2 - factor; }
再次,运行一下,如下所示:
1
2
输入参数是:1, 2
运算结果:1
其中蓝色的是在控制台输入的参数。
五、总结
仅仅修改了脚本文件,而Java还是处于JVM运行状态,没有重新启动,就可以得出两种不同的计算结果,这就是脚本语言对系统设计最有利的地方。此处,我用的JDK 1.8,后面的JDK版本是不是还支持这种特性,有待观察。
相关推荐
资源名称:Java脚本编程:语言框架与模式内容简介:《Sun公司核心技术丛书·Java脚本编程语言、框架与模式》讲解了脚本语言的基本概念和使用方法,概括了Java开发人员可以使用的解决方案,并探讨了在Java应用程序中...
eclipse编程语言+JAVAspring+脚本语言+动态扩展**:这是一个关于JAVAspring编程语言的脚本语言的动态扩展的资源,适合有一定JAVAspring基础的开发者。它介绍了JAVAspring的脚本语言的概念、原理和作用,以及如何使用...
Java脚本编程:语言、框架与模式
java 动态脚本语言 精通 Groovy
该资源是关于javasprint语言的一些案例,有利于大家的了解与学习。
android使用webView实现java程序与js脚本的相互调用,
网络爬虫脚本语言 CrawlScript: 网络爬虫即自动获取网页信息的一种程序,有很多JAVA、C++的网络爬虫类库,但是在这些类库的基础上开发十分繁琐,需要大量的代码才可以完成一个简单的操作。鉴于这个问题,我们开发了...
一些支持库,例如IBM的Bean Scripting Framework,能够帮助你把不同的脚本语言集成到Java程序。这些支持框架能够让你的Java应用在不作大量修改的情况下,运行Tcl、Python和其他语言编写的脚本。 在Java应用中集成了...
尽管名字叫做JavaScript,但JavaScript和Java编程语言没有关系。尽管由于它们都是用C编程语言的语法,它们表面上有一些语法相似性,但是,它们却有很大的不同。尽管如此,JavaScript也不断发展,并且现在能够真正...
Java脚本语言工具——scriptpad 使用的演示可以参考我的博客: http://blog.csdn.net/froole 执行方法: Windows下,鼠标双击jar文件 其他系统包括在内,或者用java -jar命令来执行
java程序通用的产品包模板,启停脚本可以同时兼容普通java工程和springboot工程,如有定制化需求可以自行扩展。
脚本是一种非常简单的脚本语言。 它的预期用途是作为其他Java程序中的嵌入式语言。 它不是完整的编程语言。 如果您需要其中之一,我建议您看一下: :Java中出色的Python语言的实现。 :Java中JavaScript的实现。 ...
JavaFX Script 脚本编程语言是java多媒体技术方面的应用,设计javaFX入门编程
java脚本编程,让你快速适应java脚本语言
主要来帮助java程序员来学习静态的html脚本语言,希望可以对您有所帮助。
C++和Java是主流的两种编程语言,但是现在整个网上对实现这两种语言混合编程的资料少之又少,却又说之不全,并且有时多种问题现在也含糊不清,对正在学习或使用这两种语言的朋友造成很大的困扰。本人的这篇拙作,...
pike是一个动态程序设计语言,语法类似于Java和C。pike易于学习,不需要长时间复杂的编译过程,具有强大的内置数据结构,使得编程人员能够进行快速的数据处理。
magic-script是一款基于JVM的脚本语言,目前主要是为magic-api项目设计。magic-api,接口快速开发框架,通过Web页面配置,自动映射为HTTP接口;spider-flow,新一代爬虫平台,以图形化方式定义爬虫流程,不写代码...
一个软件为了快速开发,可能是使用Delphi或VB作为界面开发首选语言,底层的指令或核心算法,会使用C/C 处理,涉及数据处理的时候,为了安全和快速开发,会使用Javascript或Python等脚本语言实现数据分析处理。...
Lua中文教程 很简单的脚本编程语言 很容易与C/java等语言调用 比如大型游戏的剧情 还有安卓上的愤怒的小鸟便是用Lua写的 虽说是脚本年语言 但这种语言执行效率特别高 而且还特别简单方便