本文目錄一覽:
如何用java執行指定頁面中的js代碼
要在java中執行js代碼,首先明白,java不支持瀏覽器本身的方法。支持自定義的js方法,否則會報錯
先新建一個js文件:jsss.js
內容如下:
function aa(a,b){ return a+b;
}
然後在java中寫代碼:
public class ZipTest {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName(“js”);
String jsFileName=”G:\\javaPro\\zmwmcc\\WebRoot\\jsss.js”;
FileReader reader = new FileReader(jsFileName); // 執行指定腳本 engine.eval(reader);
if(engine instanceof Invocable) {
Invocable invoke = (Invocable)engine; // 調用merge方法,並傳入兩個參數
Double c = (Double)invoke.invokeFunction(“aa”, 2, 3); //調用了js的aa方法
System.out.println(c);
}
// engine.eval(“alert(\”js alert\”);”); // 不能調用瀏覽器中定義的js函數 // 錯誤,會拋出alert引用不 }
}
如何在java中調用js方法
在Java中調用js文件中的function,傳入調用參數,並獲取返回值
js文件中的merge函數將兩個參數a,b相加,並返回c。
// expression.js
function merge(a, b) {
c = a * b;
return c;
}
在Java代碼中讀取js文件,並參數兩個參數,然後回去返回值。
package com.sinaapp.manjushri;
import java.io.FileReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
/** * Java調用並執行js文件,傳遞參數,並活動返回值 * * @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); // 執行指定腳本
engine.eval(reader);
if(engine instanceof Invocable) {
Invocable invoke = (Invocable)engine; // 調用merge方法,並傳入兩個參數
// c = merge(2, 3);
Double c = (Double)invoke.invokeFunction(“merge”, 2, 3);
System.out.println(“c = ” + c);
}
reader.close();
}
}
輸出結果:
c = 5.0
請問怎麼寫java調用node環境運行js代碼?
nodejs 運行代碼可以在命令行中使用命令「 node /path/xxx.js 」來執行
所以我們可以藉助 java 的 Runtime 類,可以執行系統本地的命令, 例如:
Linux系統下:Runtime.getRuntime().exec(“node /path/xxx.js”);
Window系統下:Runtime.getRuntime().exec(“cmd /c node /path/xxx.js”);
當然推薦使用 Apache-Commons-Exec 工具類,可以屏蔽不同系統命令差異,並且獲取結果更簡單
工具類使用可以參考此文: 網頁鏈接
java程序中運行js腳本
我們要在Java中執行JavaScriptMethods.js中的execute(s1,s2)方法,JavaScriptMethods.js文件內容如下:
function execute(s1, s2){
return s1 + s2;
}
首先需要定義一個介面,這個介面中給出與要執行的JavaScript方法一樣的方法簽名,我們定義介面Methods,它的內容如下:
/**
* 介面中的方法簽名必須與要執行的JavaScript方法一致
* @author yuncong
*
*/
public interface Methods {
public String execute(String s1,String s2);
}
然後,就可以用腳本引擎執行JavaScriptMethods.js中execute(s1,s2)方法了,具體內容寫在下面的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的參數為所要執行的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();
}
}
}
運行ExecuteScript類,輸出如下:
?
1
2
/C:/Users/yuncong/git/login/target/classes/executescript/
liyuncong
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/249173.html