実行するクラスのソースコードを編集できない場合の別のアプローチは、コマンドプロンプトで実行するのと同じようにRuntime#exec()
、コマンドを使用してプログラムでクラスを実行し、そのstdout(およびstderr)をキャプチャすることです。 java
!)によってProcess
。
Process process = Runtime.getRuntime().exec("java -cp /path/to/your/pkg pkg.pkg");
InputStream stdout = process.getInputStream();
InputStream stderr = process.getErrorStream();
// Read and write it to response.getOutputStream() the usual way.
これまで実際に使用したことがない場合は、このよく知られたJavaWorldの記事(4ページすべて)を読んで、その警告を学び、理解することRuntime#exec()
を強くお勧めします。
最後になりましたが、Java / JSPコードは、Webブラウザが実行される場所(クライアント側)ではなく、Webサーバーが実行されるマシン(サーバー側)で物理的に実行され、WebサーバーのJavaランタイムセキュリティマネージャーが許可する必要があることに注意してください。 Webアプリ内から実行Runtime#exec()
します。このアプリをセキュリティマネージャーを制御できないサードパーティのホストにデプロイする場合は、Runtime#exec()
通話がブロックされてスローされる可能性が高くなりますSecurityException
。
言うまでもなく、これはすべてかなり臭いです。これらのクラスがユーザー制御のコードに関係している場合は、おそらく巨大なセキュリティエクスプロイトの穴を開いていることになります。