`
chenhua_1984
  • 浏览: 1255527 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

java6动态编程 ,java对脚本语言的支持 (js)

    博客分类:
  • java
阅读更多

    jdk6增加了对动态语言的支持,我觉得他的原理就是把动态语言也编译成JVM可以理解的JAVA字节码的形式来执行的。主要支持的有javascript ,ruby ,php,python 等

  这样就可以利用脚本语言的动态特性。

 

下面是对javascript支持的几个例子。

第1个:

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class HelloScript {
    public static void main(String[] args){
        
 例子比较简单,就是打印hello word,重要的几个类:
写道
ScriptEngineManager factory=new ScriptEngineManager();
ScriptEngine engine=factory.getEngineByName("JavaScript");

 
        try {
            engine.eval("print('hello word')");
        } catch (ScriptException ex) {
            Logger.getLogger(HelloScript.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

第二个:

java调用脚本语言的方法

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class TestJsFun {
 public static void main(String[] args){
        ScriptEngineManager factory=new ScriptEngineManager();
        ScriptEngine engine=factory.getEngineByName("JavaScript");
        try {
            String script="function hello(name){return 'Hello'+name}";
            engine.eval(script);
            javax.script.Invocable inv=(Invocable)engine;
            try {
                String res = (String) inv.invokeFunction("hello", "chenhua");
                System.out.println(res);
            } catch (NoSuchMethodException ex) {
                Logger.getLogger(HelloScript.class.getName()).log(Level.SEVERE, null, ex);
            }

        } catch (ScriptException ex) {
            Logger.getLogger(HelloScript.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

 脚本引擎本身并不负责执行在脚本中定义的方法,而是转换为javax.script.Invocable 的对象ivh,有ivh的方法invokeFunction()方法来调用脚本的方法。invokeFunction()方法的第一个参数必须是方法名。后面是参数列表。

 

第三个例子:脚本语言用java的变量

import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class TestScriptVariables {
         public static void main(String[] args){
                ScriptEngineManager factory=new ScriptEngineManager();
                ScriptEngine engine=factory.getEngineByName("JavaScript");
                testScript(engine);
         }
         public static void testScript(ScriptEngine engine){
             File file=new File("F:\\test.txt");
             if(!file.exists()){
            try {
                file.createNewFile();
            } catch (IOException ex) {
                Logger.getLogger(TestScriptVariables.class.getName()).log(Level.SEVERE, null, ex);
            }
             }
             engine.put("f", file);
        try {
            engine.eval("println('file size:'+f.length())");
        } catch (ScriptException ex) {
            Logger.getLogger(TestScriptVariables.class.getName()).log(Level.SEVERE, null, ex);
        }
         }
}
 
通过 写道
engine.put("f", file);

 来设置一个全局的变量。这个API比较重要

这样就取到了文件的大小。

 

第4个例子

脚本语言适用java的类库

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class TestUsingJdkClass {
public static void main(String[] args) throws ScriptException, NoSuchMethodException{
                ScriptEngineManager factory=new ScriptEngineManager();
                ScriptEngine engine=factory.getEngineByName("JavaScript");
                testScript(engine);
         }
         public static void testScript(ScriptEngine engine) throws ScriptException, NoSuchMethodException{
            String js ="function doSwing(t){ var f=new Packages.javax.swing.JFrame(t);f.setSize(400,300);f.setVisible(true);}";
            engine.eval(js);
            javax.script.Invocable inv=(Invocable)engine;
            inv.invokeFunction("doSwing", "from javascript swing window");
         }
}

 在脚本中使用了Packages这一个全局变量,专门用于访问java的类库,程序运行后,会出现java Swing的一个窗体

看截图


最后一个例子:脚本语言实现java的接口

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class TestScriptInterface {
public static void main(String[] args) throws ScriptException, NoSuchMethodException{
                ScriptEngineManager factory=new ScriptEngineManager();
                ScriptEngine engine=factory.getEngineByName("JavaScript");
                testScript(engine);
         }
         public static void testScript(ScriptEngine engine) throws ScriptException, NoSuchMethodException{
            String script="var obj= new Object();obj.run=function(){println('run() was called');}";
            engine.eval(script);
            Object obj=engine.get("obj");
            javax.script.Invocable inv=(Invocable)engine;
            Runnable r=inv.getInterface(obj, Runnable.class);
            Thread t=new Thread(r);
            t.start();

         }
}

 这里通过这句:

Object obj=engine.get("obj");

来获得脚本中的变量。

然后在通过ivh的getIntegerface()方法转化为java的接口。最后启动一个线程来执行它。

 

 

另外:在jdk6中有一个命令行工具:jrunscript

进入bin目录,下面可以运行的,默认为javascript语言,这个可以用来测试我们写的脚本是否正确


  • 大小: 20.3 KB
  • 大小: 10.5 KB
分享到:
评论
3 楼 sp42 2014-05-25  
学习了 不错!
2 楼 蜀山红日 2012-08-31  
呵呵,实现了部分DWR的功能吧
1 楼 chen4w 2011-06-23  
有帮助,谢谢分享!

相关推荐

    javasprint脚本语言编程的web案例

    在"javasprint脚本语言编程的web案例"这个主题中,我们可以深入探讨以下几个关键知识点: 1. **JavaSprint基础**:JavaSprint的核心在于它的简洁性和可读性。它扩展了Java语言,提供了模板引擎,允许开发者在HTML中...

    Java调用Groovy,实时动态加载数据库groovy脚本

    Java作为一种广泛使用的静态类型编程语言,有时候可能无法满足所有需求,特别是在处理动态代码执行和热部署时。此时,Groovy这种基于JVM的动态语言就发挥了重要作用。本文将详细讲解如何在Java应用程序中调用Groovy...

    Java脚本语言程序员手册

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

    java与脚本语言.rar

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

    纯Java 实现的一个脚本语言 语法类似javascript

    要深入学习和使用Scorpio-Java,你需要了解Java编程基础,熟悉JavaScript语法,并可能需要阅读项目文档,研究源代码,甚至参与到项目的贡献中去。此外,通过实际编写和运行脚本来实践使用,是掌握任何脚本语言的最好...

    java脚本语言

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

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

    此外,解释性语言通常对错误更宽容,适合快速原型开发和动态脚本编写。 脚本语言,如JavaScript、PHP、VBScript和Perl,它们介于HTML和传统的编程语言之间,具有比解释性语言更简单的语法结构。脚本语言主要用于...

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

    本文探讨了Java和脚本语言的整合与应用,讨论了脚本语言的开发特点和Java与脚本语言的整合理由、整合方法和注意事项,并对Java与其他语言的互操作性进行了研究,为程序开发者提供了一个合适的选择来平衡利用Java和...

    java运行js脚本引擎-----rhino

    Java运行JavaScript脚本引擎Rhino是一个强大的工具,它允许Java应用程序执行JavaScript代码并利用JavaScript的灵活性和动态性。Rhino是Mozilla基金会开发的一个开源项目,它完全用Java编写,因此可以无缝集成到Java...

    Java直接运行JS代码

    在Java编程环境中,有时我们需要与JavaScript交互,例如执行一些动态脚本或者利用JavaScript库的功能。Java提供了这样的能力,让我们可以直接在Java程序中运行JS代码。这主要得益于Oracle公司在Java 6版本引入的一个...

    脚本化Java

    【脚本化Java】是指将JavaScript这种脚本语言与Java编程语言相结合,使得JavaScript能够用于控制和定制Java应用程序。在Java 6版本中,引入了对脚本化语言的支持,特别是通过内置的JavaScript解释器(如Rhino),...

    java脚本编程

    尽管“Java脚本编程”这个表述在日常交流中可能会被提及,但实际上Java和JavaScript是两种完全不同的编程语言。Java是一种面向对象的编程语言,它由Sun Microsystems开发并在1995年发布。Java以其跨平台性著称,即...

    纯Java 实现的一个脚本语言 语法类似javascript.zip

    标题中的“纯Java实现的一个脚本语言 语法类似javascript.zip”揭示了这是一个使用Java编程语言构建的脚本引擎,其语法设计受到了JavaScript的影响。这意味着它可能提供了一个在Java环境中执行类似JavaScript语法的...

    第 1 部分: 引入 Java 脚本 API

    4. **交互式编程**:Java脚本API还支持与脚本环境的交互,例如设置全局变量、调用脚本函数、捕获异常等。 5. **使用脚本文件**:除了直接执行字符串中的脚本,还可以加载并执行外部脚本文件。例如,如果有一个名为`...

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

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

    JavaFX Script 脚本编程语言

    JavaFX Script 编程语言基于 Java 平台,因此要求在系统上安装 JDK 5 或 JDK 6(6 更快)。在开始学习 JavaFX Script 编程语言之前,需要在系统上安装 JDK 6 或 JDK 5,然后再继续学习本教程。 knowledge point 1...

    Java 8 Nashorn 脚本引擎

    Java 8 Nashorn脚本引擎是Java平台上的一个强大工具,它允许开发者在Java应用程序中直接执行JavaScript代码,极大地增强了Java与动态语言的交互能力。Nashorn引擎首次引入于Java 8,作为对之前Rhino JavaScript引擎...

    java脚本 快速学习

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

Global site tag (gtag.js) - Google Analytics