`

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脚本编程”的表述可能略有不准确之处,但通过了解Java生态系统中的脚本语言,我们可以发现许多强大的工具和技术,这些工具和技术不仅提高了开发效率,还为Java开发者提供了更加灵活的选择。无论是Groovy...

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

    根据给定的信息,“Java脚本编程:语言、框架与模式”这一主题包含了三个核心部分:Java作为一门编程语言的基础知识、流行的Java开发框架以及在Java编程中常用的软件设计模式。 ### Java编程语言 #### 1. Java语言...

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

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

    shell,bat脚本运行java程序

    当需要定期或按需运行Java程序时,利用这两种脚本语言可以极大地提高工作效率。下面将详细介绍如何使用shell脚本(适用于Unix/Linux系统)和bat脚本(适用于Windows系统)来运行Java程序。 **shell脚本运行Java程序...

    java调用脚本语言笔记(jython,jruby,groovy)

    Java调用Jython、JRuby和Groovy提供了强大的动态编程能力,使得开发者可以在Java应用中充分利用这些脚本语言的优点。了解如何在Java中正确地调用和管理这些脚本,对于提升开发效率和应用功能都有很大帮助。在实际...

    Java与脚本语言的整合与应用.pdf

    不但可以继续使用脚本语言来编辑程序,还可以使用强大的Java类库来扩展脚本语言的能力。从而使Java程序设计员拥有动态定做应用程序的能力。 4. Java和脚本语言整合的注意事项 当进行与脚本语言的整合时,需要考虑...

    java与脚本语言.rar

    Java是一种广泛使用的面向对象的编程语言,而脚本语言则以它们的轻量级、解释执行和快速开发特性而闻名。两者在软件开发领域中各有所长,常常被用来解决不同的问题。本压缩包文件“java与脚本语言.rar”可能包含关于...

    Java数据库应用程序编程指南数据库脚本

    在Java编程领域,数据库应用程序开发是一项至关重要的任务。本文将深入探讨如何使用Java进行数据库应用程序编程,特别是关于创建和管理数据库脚本的实践指南。我们将主要关注Java与Oracle数据库的交互,因为压缩包中...

    javasprint脚本语言编程的web案例

    JavaSprint是一种基于Java的脚本语言,常用于快速开发Web应用程序。它的设计目标是简化Web界面的构建,提供一种更高效、更易读的语法,使得开发者可以更专注于业务逻辑,而不是繁琐的低级编程任务。在"javasprint...

    java 动态脚本语言 精通 Groovy

    Groovy是一种基于Java平台的动态脚本语言,它在Java开发者中越来越受欢迎,因为它提供了简洁、灵活的语法,以及强大的动态编程能力。Groovy与Java兼容性极佳,可以直接调用Java类库,使得它在Java生态系统中具有广泛...

    编译性语言、解释性语言和脚本语言

    计算机编程语言根据其工作原理和执行机制,主要分为编译性语言、解释性语言和脚本语言。这三种类型的编程语言各有特点,适用于不同的场景。 编译性语言,如C、C++、Objective-C和Fortran,它们的源代码首先需要通过...

    Java脚本语言程序员手册

    《Java脚本语言程序员手册》是一本专门为Java脚本编程者设计的指南,旨在帮助开发者深入理解和高效利用Java脚本语言。手册详细介绍了Java Scripting API(JSR 223)以及相关的脚本框架,如Rhino和Nashorn,这些都是...

    Java语言程序设计.pdf

    而解释器则是对源代码逐行解释并立即执行,不需要编译过程,适合小型程序或脚本语言。 3. Java语言的发展史:文档提到Java语言是在1991年由James Gosling、Bill Joy、Patrick Naughton、Chris Warth、Ed Frank和...

    java脚本语言

    Java脚本语言,虽然在名字中包含了"Java",但其实与Java编程语言并不完全相同。它是用于增强网页交互性和动态性的脚本语言,主要在客户端浏览器中运行,以JavaScript最为常见。JavaScript是由Netscape公司的Brendan ...

    java android 执行脚本代码(java代码)

    在Android开发中,Java语言是主要的编程工具,但有时候我们可能需要在应用程序中执行一些脚本代码,比如JavaScript、Python或Shell等。这通常是为了实现一些特定功能,如自动化处理、数据解析或是利用第三方库的脚本...

    java调用python脚本

    本教程将详细讲解如何在Java程序中调用Python脚本。 首先,我们要了解Java如何与Python交互。Java提供了一个名为`Jython`的项目,它是一个Python的实现,可以在Java平台上运行。但在这里,我们将更常见地使用Java的...

    在Java中运行Perl脚本 JERL

    Java是一种广泛使用的面向对象的编程语言,而Perl则是一种功能强大的脚本语言,常用于文本处理和系统管理任务。在某些场景下,我们可能需要在Java应用程序中调用Perl脚本来执行特定的功能。JERL(Java-Embedding for...

    java脚本 快速学习

    Java脚本语言,通常指的是Java Scripting API (JSAPI) 或者是JavaScript,它是一种轻量级、解释型的编程语言,广泛应用于Web开发中,为网页提供动态交互功能。虽然名字相似,但它与Java语言在语法和用途上有所不同。...

Global site tag (gtag.js) - Google Analytics