如何在java中运行javascript

2022-11-18阅读(3000)评论(0)牵着狗狗看MM

苏州实时公交查询

前提条件

jdk≥1.6

 

运行方法

准备段JS代码, 另存为test.js文件

function test(str){
    return '方法执行成功:入参为' + str;
}

java代码:

import javax.script.*;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class JsTest {

    public static void main(String[] args) {
        try {
            //创建一个脚本引擎管理器
            ScriptEngineManager manager = new ScriptEngineManager();
            //获取一个指定的名称的脚本管理器

            System.out.println("当前 JDK 支持的脚本语言引擎:");
            for (ScriptEngineFactory available : manager.getEngineFactories()) {
                System.out.println(available.getEngineName());
                System.out.println(available.getNames());
            }
            //输出 [nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript]

            ScriptEngine engine = manager.getEngineByName("ECMAScript");
            engine.eval(new FileReader("C:\\Users\\Administrator\\Desktop\\test.js"));


            //从脚本引擎中返回一个给定接口的实现
            Invocable invocable = (Invocable) engine;
  
            String aaa = (String)invocable.invokeFunction("test", "测试参数");
            System.out.println(aaa );
        } catch (ScriptException | NoSuchMethodException | FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
    }

}

坑点

  • 调试JS文件中的代码:可以在JS文件中需要打印的地方,通过print() 方法 输出内容,这样在java开发工具中就能看到输出的内容
  • 使用new Date()方法:js文件中有用到new Date(xxx)方法时,改成这样 new Date(parseInt(xxx)),先转成int再使用
  • ES6的支持:jdk默认是关闭了对es6的支持的,想要开启对es6的支持,需要设置一下jvm参数 -Dnashorn.args=--language=es6
  • 三元表达式:如果运行时提示三元表达那行有报错,可以尝试改成if else
  • JDK1.8对toLocaleString方法解析异常:参考https://stackoverflow.com/questions/45373338/tolocalestring-in-nashorn-engine,能升级JDK尽量升级高版本的
赞(4)
转载请注明来源:Web前端(W3Cways.com) - Web前端学习之路 » 如何在java中运行javascript
分享到: 更多 (0)