2016-04-22 18 views
-1

私の卒業プロジェクトを説明しましょう。サーバー側JSPでJavaコードを1つずつ実行

私の卒業プロジェクトは、Javaコードをオンラインでコンパイルすることについてです。

私は、ユーザーのコードをコンパイルするために、Java BeanクラスのJavaコンパイラAPIを使用しています。コンパイルが完了すると、.classファイルはD:¥eclipse-jee-mars-R-win32-x86_64¥eclipseディレクトリーに生成されます。次に、プログラムは、テキスト・エリア(JSP内)で入力された入力ファイルをD:¥eclipse-jee-mars-R-win32-x86_64¥eclipseディレクトリに保存します。入力ファイルを作成した後、実行時にdosコマンドを使用してコードを実行し、getInputストリームを処理します。 getInputストリームはコードの出力を返します。入力コード(ユーザーのコード)が出力ファイルを作成すると、出力ファイルも生成されます。

"あなたのコードの出力ファイル名は 'output.txt'であるべきです。

ユーザーのコードによって出力ファイルが作成された場合。 "output.txt"ファイルはD:¥eclipse-jee-mars-R-win32-x86_64¥eclipseディレクトリに生成されます。プログラムはJSPに 'output.txt'の内容を取得し、コードの "出力"を表示します。ユーザー。

これまでのところ問題ありません。問題はここから始まります。 1人のユーザーには問題はありませんが、2人以上のユーザーがいると思います。 2人以上のユーザーが同時にコードをコンパイルすると、すべてのユーザーが同じ名前のファイルをD:\ eclipse-jee-marsに作成するため、.class .javaファイルと "output.txt"ファイルが同じファイルになるため、問題が発生します。 -R-win32-x86_64 \ eclipseディレクトリにあります。たぶん、すべてのユーザーにとって、ファイルを一意の名前として作成すると助けになりますが、別の問題が発生します。私たちのプロジェクトでは、コードのランタイムを見てコードを分析します。この解決法[ユニークな名前]は並列の作業コードをもたらし、分析結果は不公平になります。時には1つのコードが動作することがあるので、100のコードがウェブサイトで動作することがあります。

私はコードをコンパイル、実行、解析する必要がありますが、並列ではありません。

どうすればこの問題を解決できますか?このような状況では、どのような解決方法が使えますか?

+1

あなただけが段落を使用した場合、あなたの質問は読みやすくなります... –

+0

申し訳ありませんが、私は急いで尋ねました。理解できない場合は段落を分けることができますか? –

+0

あなたが急いでいる場合でも、特にボランティアの助けを求めている場合は、*常に*質問をできるだけ理解しやすく、答える時間を取るべきです。あなたが今すぐに時間を持っていなければ、そうでなければあなたを喜んで助けてくれる人たちをイライラさせるのではなく、後で延期する。 –

答えて

0

"インターネットからのコードを受け入れてサーバーサイドでコンパイル/実行する"というのは、特に悪い考えのように思えます。 DOS(Denial of Service)はそのうちの1つだけです。

さらに、外部からコードを実行し、共通のよく知られたファイルを共有するためのアーキテクチャ - あなたの状態としては、 - それは不可能、これらのプログラムを複数実行することができ、同時に

は、いくつかの中に、この外部コードの保存しますIDEのディレクトリは別の奇妙なものです。

実際、このアーキテクチャ全体が悪い考えであり、私はそれを再考する以外の解決策を提案するのは難しいと思う:非常にインターネットからランダムなコードを受け入れる正当な理由正確にこの質問を調べる以外に)、ここにそれを明記してください。

抗議(そしてこのヒントに従わないことをお勧めします)では、アプリケーションのコンソール出力(例:System.out)を1つのwellknownファイルの代わりにクライアントにパイプするオプションを指摘します。少なくとも今では、応答を混ぜることなく、並行して来る多くのユーザーが安全に攻撃を受けることができます。

+0

私は他の詳細を言っていない、申し訳ありません。ユーザー用のログインシステムがあり、すべてのユーザーは大学からのものです。また、彼らの情報は学生に依存するように保管されているので、学生からの攻撃はないと考えています。大学に入らない他のユーザーは、システムを使用できません。 –

+0

コンパイル/実行する別のディレクトリを試すと、エラーが発生するため、IDEのディレクトリにコードを格納する必要がありました。 –

+0

私はまだこれが*特に悪い考えであると仮定します*。あなたはこの解決策で解決しようとしている問題を述べていません。この解決策は、人工の宿題以外の問題に対する適切な解決策ではありません。 –

0

私はsynchronizedブロックを使用して私の問題を解決しました。私のプロジェクトには十分です。 プロジェクトJSPファイル内。

synchronized(this){ 
//my compilation, running and analysis part is here 
} 

ここでは、1つのスレッドでこの部分を処理できます。これは、何千人ものユーザーにとって、すべてのコードが1つずつ処理されることを意味します。並行作業コードはありません。

関連する問題