2012-11-18 10 views
6

私はユーザー入力を受け取り、テキストファイルに変換するWebサイトを開発しようとしています。テキストファイルは、.jarファイルの入力として使用されます。 (例えばjava -jar encoder.jar -i text.txt)、jarはユーザがダウンロードするために.binファイルを出力します。JSPページ内の.jarファイルを実行する

このjarはコマンドラインから実行するように設計されており、実際には.jspページ内に実装するのに最適な方法はわかりません。私はいくつかのJavaテストクラスを作成しましたが、これまでに何も機能していません。

誰でも可能な方法について提案はありますか?

+1

あなたの最善の策は、あなたのサイトにjarファイルを読み込んで処理中である可能性があります。おそらくメインクラスを置き換えるだけです。 .jarのソースがありますか?そうでない場合は、メインクラスを逆コンパイルして、どれくらい複雑かを調べることができます。コードがすべてのリソースを正しくリリースするように注意する必要があります。つまり、JVMから自分自身を呼び出すと、実行中のJVMは終了されないため、すべてが終了時に自動的に解放されると想定するだけではありません。代わりに、おそらく別の実装を見つけることができます - エンコーディングは何ですか? – Rup

+0

それは面白い考えです、ありがとう、私はそれを考えていませんでした。基本的に私が使用している.jarファイルは自分のものではないので、エンコーディングについてはわかりません。それはハードウェアによって解釈されるようにテキストファイルを16進数に変換するために使用されます。後で.jarファイルを逆コンパイルし、それが実行可能な方法であるかどうかを確認します。一方で、他の誰かが歓迎されているアイデアを持っている場合は... – Bam421

答えて

3

外部プロセスとして実行する代わりに、現在のJVMに、そのメインクラスを呼び出すことである。

  1. ジャー
  2. META-INF/MANIFEST.MF抽出/オープンMain-Class:を識別する。 EncoderMainClass.main("-i", "text.txt")

このいやしくもは、新しいOSのプロセスを作成する必要がないため、より速くなるように、しかし、セキュリティ上の考慮事項があるかもしれません:それはそのmainメソッドを呼び出します

  • EncoderMainClassと呼ばれていると言います。

  • +0

    これは完全に機能し、メインクラスを通して引数を渡し、.binファイルを生成することができました。セキュリティ上の考慮事項によって、正確には何を意味するのですか?ユーザーが何らかの形でオーバーフローする可能性がありますか?ご協力いただきありがとうございます。 – Bam421

    +0

    [SecurityManager](http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/SecurityManager.html)を参照してください。クラスには、アプリケーションサーバーのコンテキスト内で実行されているコマンドラインv/sで実行されているときに、異なるセキュリティポリシーが適用されます。それが働いているので、私の推測はあなたが大丈夫になるはずです。 –

    0

    ProcessBuilderを使用して、新しいJVMを起動

    は、javaファイルを作成します

    、あなたはこのようsomrthingしようとしています。

    ProcessBuilder pb = new ProcessBuilder("/path/to/java", "-jar", "your.jar", "thetextfile.txt"); 
    pb.directory(new File("preferred/working/directory")); 
    Process p = pb.start(); 
    

    PS:他に破壊するように扱うか、プロセス、それはすべてのメモリを食べるようになる

    0

    あなたはクラスパス上のWebアプリケーションにこのjarファイルを置くことができる。ここ

    はあなたが始めるために何かありますとそれのクラスとメソッドを使用します。ソースがない場合は、javadocがある方が良いでしょう。しかし、classpathにいなくても、exampleまたはthis exampleを試すことができます。

    関連する問題