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簡單應用