java调用js简单应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java调用js简单应用相关的知识,希望对你有一定的参考价值。

本示例采用了多个js文件,来展示java调用js的效果,jdk采用的1.8版本(貌似1.6以上都支持,未验证)

一、common.js

// 获得当前日期,格式:yyyy年MM月dd日
function getNowDate() {
var date = new Date();
var y = date.getFullYear();
var m = addZero(date.getMonth() + 1);// 获取当前月份的日期
var d = addZero(date.getDate());
return y + "年" + m + "月" + d + ‘日‘;
}

// 补0操作
function addZero(number){
if (number < 10) {
number = ‘0‘ + number;
}
return number;
}

二、main.js

function sayHello(name){
return name + ‘ 您好,现在是公元‘ + getNowDate();
}

三、java接口

package com.qfx.interfaces;

/**

  • <h5>描述:实现与javascript通信的接口</h5>
  • @author zhangpj 2018年9月6日
    */
    public interface JavaScriptInterface {
    // 方法名要与JavaScript中存在的函数名相同,这里和main.js中的方法sayHello(name)相同
    public String sayHello(String name);
    }

四、java调用

package com.qfx.test;

import java.io.FileReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import com.qfx.interfaces.JavaScriptInterface;

/**

  • <h5>描述:Java调用JavaScript中函数的测试类</h5>
  • @author zhangpj 2018年9月6日
    */
    public class ExecuteJavaScript {

    public static void main(String[] args) {
    readScriptTest("张三");
    }

    public static void readScriptTest(String param) {
    ScriptEngineManager manager = new ScriptEngineManager();
    // 1.获取一个JavaScript 引擎实例
    ScriptEngine engine = manager.getEngineByName("JavaScript");

      try {
          // 2.获取文件路径
          String path = Thread.currentThread().getContextClassLoader()
                  .getResource("").getPath();
          // System.out.println(path);
          // 3.执行js脚本,FileReader的参数为所要执行的js文件的路径
          engine.eval(new FileReader(path + "../static/js/dateUtil.js"));
          engine.eval(new FileReader(path + "../static/js/main.js"));
    
          // 4.验证engine是否属于Invocable的实例
          if (engine instanceof Invocable) {
              Invocable invocable = (Invocable) engine;
              // 5.从脚本引擎中获取JavaScriptInterface接口对象
              JavaScriptInterface executeMethod = invocable
                      .getInterface(JavaScriptInterface.class);
              // 6.调用这个js接口(会去调用js中的相匹配名称的函数)
              String info = executeMethod.sayHello(param);
              System.out.println(info);
          }
      } catch (Exception e) {
          e.printStackTrace();
      }

    }
    }

五、高级应用

参考Java8Nashorn教程,js也可以直接调用java

以上是关于java调用js简单应用的主要内容,如果未能解决你的问题,请参考以下文章

java代码在片段活动中不起作用

在Android上怎样实现JAVA和JS交互

Java基础之方法的调用重载以及简单的递归

jsp怎么调用viewerjs

java 简单的代码片段,展示如何将javaagent附加到运行JVM进程

ASP.net MVC 代码片段问题中的 Jqgrid 实现