成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

java代碼中執(zhí)行js java 執(zhí)行js

如何在java中調(diào)用js方法

在Java中調(diào)用js文件中的function,傳入調(diào)用參數(shù),并獲取返回值

創(chuàng)新互聯(lián)主營印臺(tái)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app軟件開發(fā)公司,印臺(tái)h5成都微信小程序搭建,印臺(tái)網(wǎng)站營銷推廣歡迎印臺(tái)等地區(qū)企業(yè)咨詢

js文件中的merge函數(shù)將兩個(gè)參數(shù)a,b相加,并返回c。

// expression.js

function merge(a, b) {

c = a * b;

return c;

}

在Java代碼中讀取js文件,并參數(shù)兩個(gè)參數(shù),然后回去返回值。

package com.sinaapp.manjushri;

import java.io.FileReader;

import javax.script.Invocable;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

/** * Java調(diào)用并執(zhí)行js文件,傳遞參數(shù),并活動(dòng)返回值 * * @author manjushri */

public class ScriptEngineTest {

public static void main(String[] args) throws Exception {

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("javascript");

String jsFileName = "expression.js"; // 讀取js文件

FileReader reader = new FileReader(jsFileName); // 執(zhí)行指定腳本

engine.eval(reader);

if(engine instanceof Invocable) {

Invocable invoke = (Invocable)engine; // 調(diào)用merge方法,并傳入兩個(gè)參數(shù)

// c = merge(2, 3);

Double c = (Double)invoke.invokeFunction("merge", 2, 3);

System.out.println("c = " + c);

}

reader.close();

}

}

輸出結(jié)果:

c = 5.0

請(qǐng)問怎么寫java調(diào)用node環(huán)境運(yùn)行js代碼?

nodejs 運(yùn)行代碼可以在命令行中使用命令“ node /path/xxx.js ”來執(zhí)行

所以我們可以借助 java 的 Runtime 類,可以執(zhí)行系統(tǒng)本地的命令, 例如:

Linux系統(tǒng)下:Runtime.getRuntime().exec("node /path/xxx.js");

Window系統(tǒng)下:Runtime.getRuntime().exec("cmd /c node /path/xxx.js");

當(dāng)然推薦使用 Apache-Commons-Exec 工具類,可以屏蔽不同系統(tǒng)命令差異,并且獲取結(jié)果更簡(jiǎn)單

工具類使用可以參考此文:?網(wǎng)頁鏈接

java程序中運(yùn)行js腳本

我們要在Java中執(zhí)行JavaScriptMethods.js中的execute(s1,s2)方法,JavaScriptMethods.js文件內(nèi)容如下:

function execute(s1, s2){

return s1 + s2;

}

首先需要定義一個(gè)接口,這個(gè)接口中給出與要執(zhí)行的JavaScript方法一樣的方法簽名,我們定義接口Methods,它的內(nèi)容如下:

/**

* 接口中的方法簽名必須與要執(zhí)行的JavaScript方法一致

* @author yuncong

*

*/

public interface Methods {

public String execute(String s1,String s2);

}

然后,就可以用腳本引擎執(zhí)行JavaScriptMethods.js中execute(s1,s2)方法了,具體內(nèi)容寫在下面的ExecuteScript類中的:

import java.io.FileReader;

import javax.script.Invocable;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

public class ExecuteScript {

public static void main(String[] args) {

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName("js");

try {

String path = ExecuteScript.class.getResource("").getPath();

System.out.println(path);

// FileReader的參數(shù)為所要執(zhí)行的js文件的路徑

engine.eval(new FileReader(path + "JavaScriptMethods.js"));

if (engine instanceof Invocable) {

Invocable invocable = (Invocable) engine;

Methods executeMethod = invocable.getInterface(Methods.class);

System.out.println(executeMethod.execute("li", "yuncong"));

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

運(yùn)行ExecuteScript類,輸出如下:

?

1

2

/C:/Users/yuncong/git/login/target/classes/executescript/

liyuncong

新聞標(biāo)題:java代碼中執(zhí)行js java 執(zhí)行js
分享路徑:http://jinyejixie.com/article48/ddogdhp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、網(wǎng)站營銷、企業(yè)網(wǎng)站制作網(wǎng)站建設(shè)、云服務(wù)器、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
吴江市| 依兰县| 磐石市| 平乐县| 琼中| 甘谷县| 乌拉特中旗| 揭阳市| 紫阳县| 本溪市| 芜湖县| 阜城县| 泸定县| 闸北区| 江北区| 逊克县| 页游| 仁寿县| 霍林郭勒市| 藁城市| 富源县| 盘锦市| 买车| 竹山县| 石嘴山市| 衢州市| 连城县| 芦山县| 香港 | 明溪县| 明溪县| 乌兰县| 东海县| 鄄城县| 南木林县| 廊坊市| 乐陵市| 郴州市| 昭觉县| 尼木县| 余庆县|