• java调用js代码


    jdk8里使用脚本引擎调用js

    1.定义一个js方法:

    function getRouteInfo(province){ //注意,参数不要带var。。在java里执行会报错。。
           if (province=='henan')
              return 'http://127.0.0.1/resweb';
           else  
              return '未找到对应的省份信息,province='+province;
    }

    2. 写一个java 测试类来 调用上面的js方法

    /**
     * Created by codeya on 2018/3/2.
     */
    import java.io.StringReader;
    import javax.script.Invocable;
    import javax.script.ScriptEngineManager;
    import javax.script.ScriptEngine;
    import javax.script.ScriptException;
    public class Test {
        public static void main(String args[]){
    
            //js function:getRouteInfo,入参为province
           String routeScript="function getRouteInfo(province){ 
    " + // 参数不要带var。。不然后面执行方法的时候会报错。。
                    "      if (province=='henan') " +
                    "         return 'http://127.0.0.1/resweb';
    " +
                    "      else  " +
                    "         return '未找到对应的省份信息,province='+province;
    " +
                    "}";
    
            String scriptResult ="";//脚本的执行结果
    
            ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");//1.得到脚本引擎
            try {
                //2.引擎读取 脚本字符串
                engine.eval(new StringReader(routeScript));
                //如果js存在文件里,举例
                // Resource aesJs = new ClassPathResource("js/aes.js");
                // this.engine.eval(new FileReader(aesJs.getFile()));
    
                //3.将引擎转换为Invocable,这样才可以掉用js的方法
                Invocable invocable = (Invocable) engine;
    
                //4.使用 invocable.invokeFunction掉用js脚本里的方法,第一個参数为方法名,后面的参数为被调用的js方法的入参
                scriptResult = (String) invocable.invokeFunction("getRouteInfo", "henan");
    
            }catch(ScriptException e){
                e.printStackTrace();
                System.out.println("Error executing script: "+ e.getMessage()+" script:["+routeScript+"]");
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
                System.out.println("Error executing script,为找到需要的方法: "+ e.getMessage()+" script:["+routeScript+"]");
            }
            System.out.println(scriptResult.toString());
        }
    }

    3.运行测试结果为:

    http://127.0.0.1/resweb

    说明调用成功了。。

    参考文档:

    Java 8 Nashorn 教程 :https://segmentfault.com/a/1190000006041626 这篇文章里也写了js调用java

    http://www.colabug.com/2380506.html Java爬虫入门篇(二)Java 8 Nashorn 动态执行js脚本

  • 相关阅读:
    股指期货风声水起 股市"蛇人″给我们启示
    Goals of Distributed Application Design
    火箭股票,火箭发射(07.4.12)
    SQLAlchemy完全入门
    巧用异或
    FastAPI启用HTTPS
    错误记录:Can't connect to MySQL server on xxx
    MySQL常用命令
    就是想写点什么
    Android关于Activity class {package/class} does not exist
  • 原文地址:https://www.cnblogs.com/codeya/p/java_call_js.html
Copyright © 2020-2023  润新知