Node.js と Java が同じサーバにインストールされているなら 単純に Node からコマンドを実行してはどうでしょうか?
そのへんは child_process
にまとまっています。標準で使用できます。
https://nodejs.org/api/child_process.html
child_process.exec()
(非同期)
child_process.execSync()
(同期的)
あたりがシンプルかと。
次の二つが同じディレクトリにあるとして、
Hoge.java
:
java
1public class Hoge {
2 public static void main(String[] args) {
3 System.out.print("Hello, world!");
4 }
5}
xxx.js
:
js
1const { execSync } = require('child_process')
2
3result = execSync('javac Hoge.java && java Hoge')
4
5// 戻り値はバッファなので文字列に変換する
6console.log(result.toString()) // Hello, world!
node xxx.js
で Java の出力結果 Hello, world!
を出力できます。Java での開発時通りにコマンドを実行すればよいので簡単かと思います。
HTTP サーバで利用する場合、例えば 公式のガイド のコードに追記するなら、先頭でモジュールをインポートし、
js
1const http = require('http');
2const { execSync } = require('child_process'); // 追加のインポート
任意のパス、例えば .../java
で Java を実行した処理結果を返したいなら、次のようにします。
js
1const server = http.createServer((req, res) => {
2
3 if (req.url === "/java") { // 公式ガイド通りの場合 http://localhost:3000/java
4 result = execSync('javac Hoge.java && java Hoge'); // Java処理実行
5 res.statusCode = 200;
6 res.setHeader('Content-Type', 'text/plain');
7 res.end(result.toString()); // 結果を文字列にして返す
8 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/15 00:12 編集
退会済みユーザー
2021/09/15 01:44 編集
2021/09/15 14:11