`

JavaScript在Java里执行?

阅读更多

       好久没去IBM的developerworks了,今天去看了下,发现这么个新鲜的东东: Java6.0中支持JavaScript. 呵呵, 有意思, 试试,于是在eclipse里照着IBM里的教程小跑了下那个程序,出结果了. 其中Java程序如下:

 

public class ScriptDemo  {
 public static void main(String args[]) throws Exception {
        // Get the JavaScript engine
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("JavaScript");

        // Set JavaScript variables
        Bindings vars = new SimpleBindings();
        vars.put("demoVar", "value set in ScriptDemo.java");
        vars.put("strBuf", new StringBuffer("string buffer"));
        
        // Run DemoScript.js
        Reader scriptReader = new InputStreamReader(
          ScriptDemo .class.getResourceAsStream("DemoScript.js"));
        try {
            engine.eval(scriptReader, vars);
        } finally {
            scriptReader.close();
        }
        
        // Get JavaScript variables
        Object demoVar = vars.get("demoVar");
        System.out.println("[Java] demoVar: " + demoVar);
        System.out.println("    Java object: " + demoVar.getClass().getName());
        System.out.println();
        Object strBuf = vars.get("strBuf");
        System.out.println("[Java] strBuf: " + strBuf);
        System.out.println("    Java object: " + strBuf.getClass().getName());
        System.out.println();
        Object newVar = vars.get("newVar");
        System.out.println("[Java] newVar: " + newVar);
        System.out.println("    Java object: " + newVar.getClass().getName());
        System.out.println();
    }


}

 要执行的javaScript如下:

 

println("Start script \r\n");

// Output the type of an object
function printType(obj) {
    if (obj.getClass)
        println("    Java object: " + obj.getClass().name);
    else
        println("    JS object: " + obj.toSource());
    println("");
}

// Print variable
println("[JS] demoVar: " + demoVar);
printType(demoVar);

// Call method of Java object
strBuf.append(" used in DemoScript.js");
println("[JS] strBuf: " + strBuf);
printType(strBuf);

// Modify variable
demoVar = "value set in DemoScript.js";
println("[JS] demoVar: " + demoVar);
printType(demoVar);

// Set a new variable
var newVar = { x: 1, y: { u: 2, v: 3 } }
println("[JS] newVar: " + newVar);
printType(newVar);

println("End script \r\n");

 

   运行后是出结果了, 但发现一些问题,想了想也没解决,写在这里希望能有更多的人一起来讨论:

      1, javaScript里的println是谁的方法? Java的? 还是JavaScript里的? 好像是Java的, 是像在jsp里可能直接访问application 等这些对象那样可以直接调用System.out的println方法? 都还有什么Java方法可以在JavaScript里直接调用? 这些方法在javaScript文件中怎么就不能再在浏览器直接运行javaScript方法那样了吧? 毕竟浏览器是不认识方法println的.另外看来也是完全像在Java里那样调用StringBuffer里append方法: strBuf.append(" used in DemoScript.js");  那能不能这样: 在一个辍名为js的文件里写的全是java语句,再在别的真正Java程序里eval这个貌为js的Java文件,这样岂不是达到了动态编译的目地?像在JavaScript里的eval那样.

     2, printType方法的obj.getClass看起来既熟悉又陌生: 熟悉的是在Java里我们可以调用一个对象的getClass()来获得它的类信息,陌生的是这个调用没有一个方法应有的明显特征括号.又是在javaScript里可以按javascript的语法特性来调用Java里的方法: 也就是把Object类的getClass方法当成JavaScript里的一个属性.接下来又有obj.getClass(),是不是说即可以以Java的语法来调用也可以模仿JavaScript里的语法特性来调用?

    3, 是不是在背后Java与JavaScript的过滤上有个类似于jsp里的pageContent这样的一个对象来作为一些临时变量的中转站?

    4, 这样的feature能有什么具体的用处?会像Java与groovy的结合那样来做到不启动服务器就可以直接来更改需求?IBM的教程里有这样一句话"If your script implements all the methods of a Java interface, you can also use getInterface() to obtain a Java object whose methods are coded in the scripting language. "是否就意味着可以用javaScript来实现Java里的一个接口? 那么这个接口的实现具体又有什么语法新特性? 不会在javaScript里出现关键字implements吧? getInterface ()调用返回的接口怎么指定? 也就是说JVM怎么知道能有什么接口可以get?

    5, 是不是会有人根据这个特性写一个更加灵活的web开发框架?  

    6, JDK6.0中有了这个对JavaScript的支持,是否会像当初Ajax那样掀起JavaScript学习使用热潮?

1
0
分享到:
评论

相关推荐

    java执行JavaScript代码

    要在Java中运行JavaScript,首先需要引入支持JavaScript的引擎,如Nashorn(在Java 8中默认提供,但在Java 11后被废弃)或Rhino。如果使用Nashorn,通常不需要额外的库,因为它已经包含在Java标准版中。若选择Rhino...

    Java调用javaScript代码

    例如,你可以在Java服务端定义一个接口,该接口允许在运行时加载和执行JavaScript脚本来完成特定任务,这样就能轻松地切换或更新业务逻辑,而无需重新编译和部署Java代码。 在实际项目中,这种方法可以应用于许多...

    Java执行JavaScript代码.pdf

    标题和描述中提到的“Java执行JavaScript代码”指向了一个特定的技术范畴,即在Java环境中执行JavaScript代码。这通常涉及到使用Java中的脚本引擎API,特别是那些支持JavaScript的实现。从提供的部分内容中可以提炼...

    JavaApplet与JavaScript

    ### JavaApplet与JavaScript #### 6.1 JavaApplet ##### 6.1.1 JavaApplet概述 ...尽管如此,了解 JavaApplet 和 JavaScript 的工作原理仍然是很有价值的,特别是在维护旧的 Web 应用程序或学习 Web 开发历史方面。

    JavaScript和Java的区别.rar

    在执行环境上,JavaScript主要运行在浏览器中,通过Web API与DOM进行交互,实现网页动态化。随着Node.js的出现,JavaScript也能在服务器端运行,提供了全栈开发的可能性。而Java的应用场景更为广泛,除了浏览器插件...

    Java直接运行JS代码

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

    效率非常快的java读取javascript,附带源码和js.jar

    Rhino是由Mozilla开发的一个开源的JavaScript引擎,它完全用Java编写,能够将JavaScript代码编译为Java字节码,从而使得JavaScript能够在Java平台上高效运行。这个“效率非常快的java读取javascript”很可能就是基于...

    JAVA在服务器后端直接运行JavaScript方法

    使用JAVA来运行已有的JavaScript方法,可以只运行一小段js代码,也可以运行一个js的方法,而你可以不用关心js内部的方法是怎么实现的,只是js是可以运行的,拿到java上也可以运行。 注意不能运行页面元素的相关属性...

    java javascript 调用命令行 cmd

    在IT领域,有时候我们需要在Java或JavaScript代码中执行操作系统级别的命令,例如运行系统脚本、管理文件、控制进程等。这种需求通常通过调用命令行(CMD)来实现。本文将详细探讨如何在Java和JavaScript中调用...

    javascript加密java解密

    Java则在后端处理,可以执行更复杂的操作,包括解密前端传递过来的加密数据。 这篇博客“javascript加密java解密”(链接已给出)可能探讨了如何在JavaScript中实现加密,然后在Java后端进行解密的流程。这种做法常...

    JavaScript与Java之间的区别

    在IT领域中,JavaScript与Java是两种极为重要的编程语言,尽管它们的名字相似,但实际上有着本质的区别。本文将深入探讨这两种语言的关键特性,包括它们的设计哲学、执行环境、语法差异等方面,帮助读者更清晰地理解...

    Java和JavaScript库进行交互

    Rhino是JavaScript的开源实现,可以在Java环境中运行,提供了一种在Java中执行JavaScript代码的方式。 7. **Node.js和Java Bridge**:Node.js是基于V8 JavaScript引擎的服务器端运行环境,可以通过一些库(如J2V8或...

    java与javascript互相加解密

    这两种语言在不同的环境运行,Java主要在服务器端,而JavaScript则在客户端。在数据传输过程中,为了保证数据的安全,加密技术扮演了关键角色。本篇将深入探讨如何使用DES(Data Encryption Standard)算法在Java和...

    如何在java中使用javascript,官方指南

    Java提供了ScriptEngine接口,允许Java应用程序执行JavaScript代码,就如同在浏览器中运行的那样。脚本引擎通常由第三方库提供,如Mozilla Rhino或Nashorn。 4. Java Platform, Standard Edition(Java SE):Java ...

    RSA通过javascript加密java解密

    在“RSA通过javascript加密java解密”的场景中,我们有两个主要的技术点:JavaScript端的加密和Java端的解密。以下是对这两个环节的详细说明: 1. JavaScript端的RSA加密: - 使用库:JavaScript中常见的RSA加密库...

    java和javascript之间的DES加密解密

    这些文件可以直接运行,用于演示如何在Java和JavaScript之间进行DES加密解密。通过查看和理解这些代码,你可以更好地了解如何在实际项目中应用这一技术。 6. **安全注意事项**: 虽然DES在某些场景下仍可用,但它...

    Android javascript 调用本地Java函数

    在Android开发中,JavaScript与本地Java代码的交互是常见的需求,尤其在开发混合式应用时。这个主题,"Android javascript 调用本地Java函数",涉及到如何在Android的Web视图(WebView)中实现JavaScript与Java之间...

    zjj.rar_javascript_java网页_网页

    【标题】"zjj.rar_javascript_java网页_网页" 提供了一个关于JavaScript和Java在网页开发中的应用主题。这个压缩包文件很可能包含了多个与JavaScript和Java编程相关的网页示例或教程资源,帮助学习者理解这两种语言...

    Java与Java+Applet和JavaScript间的混编方法

    这一功能主要是在 Netscape Navigator 浏览器中实现的,通过在 JavaScript 脚本中使用 `java.lang.` 前缀来访问 Java 的内置类和方法。例如: ```javascript java.lang.System.out.println("Hello!"); ``` 虽然...

Global site tag (gtag.js) - Google Analytics