- ベストアンサー
JavaServletでJavaプログラムを実行するには
JavaServletやJSPを用いて、Javaプログラムを実行するにはどうしたら良いのでしょうか? 理想としては、クライアントがブラウザを通してサーバにアクセスし、サーバ内のJavaプログラムを実行できるようにプログラミングしたいです。 クライアントが実行しているか確認できなくても、サーバで実行されていれば問題は解決できます。 参考のURLなどがあれば、とても助かります。 知っている方がいましたら御指導をお願いいたします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
状況が分からないので、あまり詳しい知識がなくても使える方法を書いておきます。 java.lang.Runtime.exec()を使います。 コマンドラインから実行する場合と同じようにプログラムを呼び出すことが出来ます。 引数で指定した文字列をそのままコマンドとして実行できるので、"java Hoge"などとして、mainメソッドが書かれているJavaプログラム(この場合Hogeクラス)を実行できます。 実行結果は、標準出力やエラー出力であればexecメソッドで取得されたProcessを使って取得できます。 ※コマンドをブラウザからそのまま入力させるのは非常に危険です。javaコマンドの実行だけでなく、全く関係ない操作などが出来てしまいます。 実行するクラスなどが限定できるのであれば、プルダウンからメニューを選択させて「"1"が送られてきたらクラスA、"2"が送られてきたらクラスB、"3"が...」のようにServlet内で分岐してしまう方が無難です。 詳しい使い方はAPIを参照してください。 // インデントに全角空白を使ってます。 public CommandServlet extends HttpServlet { // 実行していいクラスの名前 private static String[] COMMANDS = { "my.HelloWorld", "my.FileList" //パッケージから記述。各クラスはメインメソッドを作る。 }; public void service(HttpServletRequest req, HttpServletResponce res) { String s = req.getParameter("comselect"); String className = null; String message = null; // 実行するクラス名を取得 try { className = COMMANDS[Integer.parseInt(s)]; } catch (Exception e) { message = "番号がおかしいよ" + e; } // 取得できていれば実行 if (className != null) { try { Runtime r = Runtime.getRuntime(); Process pro = r.exec(new String[]{"java ",className}); pro.waitFor();// 実行の終了待ち。 //成功時のメッセージ設定など... } catch (Exception e) { message = "実行失敗。" + e; } } else { message = "リクエストが変だよ"; } //以下、messageをセッションやリクエストに入れてJSPへ } 他には、実行するJavaクラスの親を作っておき、画面入力に応じてインスタンス生成→実行を行う方法もあります。
お礼
回答して頂きありがとうございます。 パソコンがスパイウェアに感染したらしく、まだプログラミングをしていない状況です。 予めクラスを用意し、それを指定されたらJavaプログラムを実行させる。 とても勉強になりました。 プログラミングの初心者なので、質問内容があやふやな点が多々あったと思いますが、理解して回答してくださって、大変助かりました。 セッショなどの意味が勉強不足で分からないのですが、実現に向けて頑張りたいと思います。