`

java调用js:javax.script

阅读更多

服务端调用js:javax.script

谈起js在服务端的应用,大部分人的第一反应都是node.js。node.js作为一套服务器端的 JavaScript 运行环境,有自己的独到之处,但不是所有的地方都需要使用它。

  例如在已有的服务端代码上增加一个业务,而这个业务使用的却是js编写。如果用node.js处理的话,会很麻烦。而且另一方面对于很多服务端程序员来说,觉得js的对象模型很奇怪,不太喜欢用js处理问题。

  对于上面这种情况,有一种简单的处理方法:javax.script API

  javax.script加入了对部分脚本语言的支持,它的原意是为了针对关于业务在客户端和服务端中,逻辑相同而语言不同导致实现不同的问题。但是这种处理方法由于前后端的分工和一些缺陷,很少在实际应用中用到。

  javax.script实现起来很简单。

一:得到一个ScriptEngine对象

ScriptEngineManager maneger = new ScriptEngineManager();
ScriptEngine engine = maneger.getEngineByName("JavaScript");

 

二:读js文件

Reader scriptReader = new InputStreamReader(
        JsInServer.class.getResourceAsStream("js文件"));

 

三:解析文件

engine.eval(scriptReader);

 

四:调用js方法,得到的结果以Object对象返回

Object result = invocable.invokeFunction("js方法", js方法参数1, js方法参数2...);

 

测试例子:

java

 

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
 
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
 
public class JsInServer {
 
    public static void main(String[] arg) throws IOException {
 
        ScriptEngineManager maneger = new ScriptEngineManager();
        ScriptEngine engine = maneger.getEngineByName("JavaScript");
 
        Reader scriptReader = new InputStreamReader(
                JsInServer.class.getResourceAsStream("TestAdd.js"));
        if (engine != null) {
            try {
                // JS引擎解析文件
                engine.eval(scriptReader);
                if (engine instanceof Invocable) {
                    Invocable invocable = (Invocable) engine;
                    // JS引擎调用方法
                    Object result = invocable.invokeFunction("add", 1, 2);
                    System.out.println("The result is: " + result);
                }
            } catch (ScriptException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } finally {
                scriptReader.close();
            }
        } else {
            System.out.println("ScriptEngine create error!");
        }
    }
}

  js:

function add(a,b){
    println("The first parameter is: " + a);
    println("The second parameter is: " + b);
    return a+b;
}
 
println("js perform success");

 执行结果:

js perform success
The first parameter is: 1
The second parameter is: 2
The result is: 3.0

 

 

分享到:
评论

相关推荐

    javax.script

    javax.script java调用js的jar包

    java调用js方法.pdf

    Java调用JavaScript方法是跨语言交互的一个重要场景,特别是在服务器端需要利用JavaScript的灵活性和库资源时。在Java中,自JDK 1.6版本起,通过JSR 223(Java Scripting API)提供了对脚本语言的支持,包括...

    java调用js方法[参照].pdf

    本文将详细讲解如何在Java中调用JavaScript方法,主要涉及两种方式:一是调用Java代码内部编写的JS方法,二是调用外部JS文件中的方法。 **一、调用Java代码内部编写的JS方法** 自Java 6开始,Java引入了`javax....

    Java调用javaScript代码

    本文将深入探讨“Java调用JavaScript代码”的技术实现,以及它在实际项目中的应用场景。 Java和JavaScript虽然名字相似,但它们是两种完全不同的编程语言,各自有其特定的用途。Java是一种静态类型的、面向对象的...

    java_run_js.rar_run_run java script

    以下是一个基本的Java调用JavaScript的示例: ```java import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public class JavaRunJsExample { public ...

    java调用js代码实现动态配置

    ### Java调用JS代码实现动态配置 在现代软件开发中,动态配置的需求越来越普遍,特别是在不希望频繁重启服务的情况下更新业务逻辑或算法时。本文将详细介绍如何利用Java调用JavaScript来实现这一目标,并通过一个...

    Java直接运行JS代码

    import javax.script.ScriptEngineManager; public class JSEngineExample { public static void main(String[] args) throws Exception { // 创建ScriptEngineManager对象 ScriptEngineManager manager = new ...

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

    2. **JavaScript到Java的互操作性**:Rhino允许JavaScript代码直接调用Java对象和方法,反之亦然,极大地增强了两种语言的交互性。 3. **嵌入到Java应用程序**:Rhino可以轻易地被嵌入到Java应用程序中,作为动态...

    java实现js中eval功能

    import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; public class JavaEvalExample { public static void main(String[] args) { ...

    java如何与脚本(javaScript)之间相互调用二

    标题“Java如何与脚本(JavaScript)之间相互调用二”主要探讨的是在Java应用程序中如何集成和调用JavaScript代码,以及反过来JavaScript如何调用Java的功能。这涉及到跨语言交互的技术,通常通过Java的ScriptEngine...

    Java使用ScriptEngine说明

    通过`invokeFunction`方法,我们可以像调用普通Java方法一样调用这个JavaScript函数。 #### 四、可用的脚本引擎 Java默认支持Mozilla Rhino引擎来执行JavaScript。然而,通过遵循JSR 223规范,可以轻松扩展以支持...

    Java调用Groovy

    import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager....

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

    1. **引入必要的类库**:在 Java Applet 中,需要引入 `javax.script.ScriptEngineManager` 和 `javax.script.ScriptEngine` 类库。 2. **创建 ScriptEngineManager 实例**:通过 `new ScriptEngineManager()` 创建...

    java浏览器调用ie内核

    `javax.script`包则提供了脚本引擎接口,可以执行JavaScript代码,间接与ActiveX控件交互。 4. **安全性与限制:** 使用ActiveX控件存在安全风险,因为它可以访问系统资源,容易成为恶意软件的入口。因此,Java...

    Java和JavaScript库进行交互

    Java可以通过`javax.script`包中的接口与JavaScript交互,允许在Java程序中执行JavaScript脚本或者调用JavaScript函数。 3. **Web Services和Ajax**:Java后端可以提供Web服务(如RESTful API),JavaScript通过...

    Java 8 Nashorn 脚本引擎

    import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; public class NashornExample { public static void main(String[] args) { ...

    java 混淆、加密js代码

    Java可以调用本地的JavaScript引擎,如Rhino或Nashorn来执行JavaScript代码。例如,使用Nashorn,你可以在Java中这样执行JavaScript: ```java import javax.script.ScriptEngineManager; import javax.script....

    js调用java类的方法

    script.src = '/path/to/javaResource?callback=handleJavaResult'; document.head.appendChild(script); ``` ### 3. 使用WebSocket WebSocket提供双向通信,允许JS和Java之间实时交互。Java端创建WebSocket服务器...

Global site tag (gtag.js) - Google Analytics