`

Java编程之脚本语言的使用

    博客分类:
  • Java
阅读更多

一、背景

       利用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脚本编程:语言框架与模式

    资源名称:Java脚本编程:语言框架与模式内容简介:《Sun公司核心技术丛书·Java脚本编程语言、框架与模式》讲解了脚本语言的基本概念和使用方法,概括了Java开发人员可以使用的解决方案,并探讨了在Java应用程序中...

    编程语言+JAVAspring+脚本语言+动态扩展

    eclipse编程语言+JAVAspring+脚本语言+动态扩展**:这是一个关于JAVAspring编程语言的脚本语言的动态扩展的资源,适合有一定JAVAspring基础的开发者。它介绍了JAVAspring的脚本语言的概念、原理和作用,以及如何使用...

    Java脚本编程:语言、框架与模式

    Java脚本编程:语言、框架与模式

    java 动态脚本语言 精通 Groovy

    java 动态脚本语言 精通 Groovy

    javasprint脚本语言编程的web案例

    该资源是关于javasprint语言的一些案例,有利于大家的了解与学习。

    android使用webView实现java程序与js脚本的相互调用

    android使用webView实现java程序与js脚本的相互调用,

    CrawlScript-bin-beta0.1 JAVA的爬虫脚本语言

    网络爬虫脚本语言 CrawlScript: 网络爬虫即自动获取网页信息的一种程序,有很多JAVA、C++的网络爬虫类库,但是在这些类库的基础上开发十分繁琐,需要大量的代码才可以完成一个简单的操作。鉴于这个问题,我们开发了...

    纯Java 实现的一个脚本语言 语法类似java s c r i p t.rar

    一些支持库,例如IBM的Bean Scripting Framework,能够帮助你把不同的脚本语言集成到Java程序。这些支持框架能够让你的Java应用在不作大量修改的情况下,运行Tcl、Python和其他语言编写的脚本。 在Java应用中集成了...

    脚本化Java

    尽管名字叫做JavaScript,但JavaScript和Java编程语言没有关系。尽管由于它们都是用C编程语言的语法,它们表面上有一些语法相似性,但是,它们却有很大的不同。尽管如此,JavaScript也不断发展,并且现在能够真正...

    scriptpad——Java脚本语言学习、演示程序

    Java脚本语言工具——scriptpad 使用的演示可以参考我的博客: http://blog.csdn.net/froole 执行方法: Windows下,鼠标双击jar文件 其他系统包括在内,或者用java -jar命令来执行

    java程序产品包模板-内置linux和Windows通用shell启动停止脚本(无需系统安装Java运行环境).zip

    java程序通用的产品包模板,启停脚本可以同时兼容普通java工程和springboot工程,如有定制化需求可以自行扩展。

    fscript:FScript的叉子,Java的简单可嵌入脚本语言

    脚本是一种非常简单的脚本语言。 它的预期用途是作为其他Java程序中的嵌入式语言。 它不是完整的编程语言。 如果您需要其中之一,我建议您看一下: :Java中出色的Python语言的实现。 :Java中JavaScript的实现。 ...

    JavaFX Script 脚本编程语言

    JavaFX Script 脚本编程语言是java多媒体技术方面的应用,设计javaFX入门编程

    java脚本编程

    java脚本编程,让你快速适应java脚本语言

    html脚本语言

    主要来帮助java程序员来学习静态的html脚本语言,希望可以对您有所帮助。

    C++与Java混合编程

    C++和Java是主流的两种编程语言,但是现在整个网上对实现这两种语言混合编程的资料少之又少,却又说之不全,并且有时多种问题现在也含糊不清,对正在学习或使用这两种语言的朋友造成很大的困扰。本人的这篇拙作,...

    PIKE--一种基于解释的脚本语言

    pike是一个动态程序设计语言,语法类似于Java和C。pike易于学习,不需要长时间复杂的编译过程,具有强大的内置数据结构,使得编程人员能够进行快速的数据处理。

    magic-script是一款基于JVM的脚本语言,目前主要是为magic-api项目设计

    magic-script是一款基于JVM的脚本语言,目前主要是为magic-api项目设计。magic-api,接口快速开发框架,通过Web页面配置,自动映射为HTTP接口;spider-flow,新一代爬虫平台,以图形化方式定义爬虫流程,不写代码...

    VC 结合Java编程的实例.rar

    一个软件为了快速开发,可能是使用Delphi或VB作为界面开发首选语言,底层的指令或核心算法,会使用C/C 处理,涉及数据处理的时候,为了安全和快速开发,会使用Javascript或Python等脚本语言实现数据分析处理。...

    Lua脚本语言中文教程.pdf

    Lua中文教程 很简单的脚本编程语言 很容易与C/java等语言调用 比如大型游戏的剧情 还有安卓上的愤怒的小鸟便是用Lua写的 虽说是脚本年语言 但这种语言执行效率特别高 而且还特别简单方便

Global site tag (gtag.js) - Google Analytics