课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > java开发:易变业务使用脚本语言编写
  • java开发:易变业务使用脚本语言编写

    发布:昆明Java培训      来源:达内新闻      时间:2016-09-30

  • 昆明达内Java培训的老师知道,Java世界一直在遭受着异种语言的入侵,比如PHP,Ruby,Groovy、Javascript等,这些入侵者都有一个共同特征:全是同一类语言-----脚本语言,它们都是在运行期解释执行的。为什么Java这种强编译型语言会需要这些脚本语言呢?那是因为脚本语言的三大特征,如下所示:

    灵活:脚本语言一般都是动态类型,可以不用声明变量类型而直接使用,可以再运行期改变类型。

    便捷:脚本语言是一种解释性语言,不需要编译成二进制代码,也不需要像Java一样生成字节码。它的执行时依靠解释器解释的,因此在运行期间变更代码很容易,而且不用停止应用;

    简单:只能说部分脚本语言简单,比如Groovy,对于程序员来说,没有多大的门槛。

    脚本语言的这些特性是Java缺少的,引入脚本语言可以使Java更强大,于是Java6开始正式支持脚本语言。但是因为脚本语言比较多,Java的开发者也很难确定该支持哪种语言,于是JSCP(Java Community ProCess)很聪明的提出了JSR233规范,只要符合该规范的语言都可以在Java平台上运行(它对JavaScript是默认支持的)。

    简单看看下面这个小例子:

    function formual(var1, var2){

    return var1 + var2 * factor;

    }

    这就是一个简单的脚本语言函数,可能你会很疑惑:factor(因子)这个变量是从那儿来的?它是从上下文来的,类似于一个运行的环境变量。该js保存在C:/model.js中,下一步需要调用JavaScript公式,代码如下:

    1 import java.io.FileNotFoundException;

    2 import java.io.FileReader;

    3 import java.util.Scanner;

    4

    5 import javax.script.Bindings;

    6 import javax.script.Invocable;

    7 import javax.script.ScriptContext;

    8 import javax.script.ScriptEngine;

    9 import javax.script.ScriptEngineManager;

    10 import javax.script.ScriptException;

    11

    12 public class Client16 {

    13    public static void main(String[] args) throws FileNotFoundException,

    14            ScriptException, NoSuchMethodException {

    15        //获得一个JavaScript执行引擎

    16        ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");

    17        //建立上下文变量

    18        Bindings bind = engine.createBindings();

    19        bind.put("factor", 1);

    20        //绑定上下文,作用于是当前引擎范围

    21        engine.setBindings(bind, ScriptContext.ENGINE_SCOPE);

    22        Scanner input =new Scanner(System.in);

    23        

    24        while(input.hasNextInt()){

    25            int first = input.nextInt();

    26            int second = input.nextInt();

    27            System.out.println("输入参数是:"+first+","+second);

    28            //执行Js代码

    29            engine.eval(new FileReader("C:/model.js"));

    30            //是否可调用方法

    31            if (engine instanceof Invocable) {

    32                Invocable in = (Invocable) engine;

    33                //执行Js中的函数

    34                Double result = (Double) in.invokeFunction("formula", first, second);

    35                System.out.println("运算结果是:" + result.intValue());

    36            }

    37        }

    38

    39    }

    40 }

    上段代码使用Scanner类接受键盘输入的两个数字,然后调用JavaScript脚本的formula函数计算其结果,注意,除非输入了一个非int数字,否则当前JVM会一直运行,这也是模拟生成系统的在线变更情况。运行结果如下:

    输入参数是;1,2 运算结果是:3

    此时,保持JVM的运行状态,我们修改一下formula函数,代码如下:

    function formual(var1, var2){

    return var1 + var2 - factor;

    }

    其中,乘号变成了减号,计算公式发生了重大改变。回到JVM中继续输入,运行结果如下:

    输入参数:1,2 运行结果是:2

    修改Js代码,JVM没有重启,输入参数也没有任何改变,仅仅改变脚本函数即可产生不同的效果。这就是脚本语言对系统设计最有利的地方:可以随时发布而不用部署;这也是我们javaer最喜爱它的地方----即使进行变更,也能提供不间断的业务服务。

    Java6不仅仅提供了代码级的脚本内置,还提供了jrunscript命令工具,它可以再批处理中发挥最大效能,而且不需要通过JVM解释脚本语言,可以直接通过该工具运行脚本。想想看。这是多么大的诱惑力呀!而且这个工具是可以跨操作系统的,脚本移植就更容易了。

    了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

    推荐文章

上一篇:java开发:break万万不可忘

下一篇:java程序:慎用动态编译

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:12/29

Java--零基础业余班

Java--零基础业余班

开班日期:12/29

Java--周末提升班

Java--周末提升班

开班日期:12/29

Java--零基础周末班

Java--零基础周末班

开班日期:12/29

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56