2016-04-12 23 views
-4

使用java compiler APIjava filejspにコンパイルします。私はhtmlファイルを作成し、そのtextArea要素を使って、ユーザが入力したjavaのコードであると予想されるテキストをサーバ上のJSPに送り、文字列に集めた後に.javaというファイルを作成してtextArea内容はコンパイラAPIを使用していましたが、ファイルをコンパイルしていません。私はthisjspで `` .java file`をどのようにコンパイルできますか?

index.html

<form action="formAction.jsp" method="post"> 
     Please enter your text: 
     <br/> 
     <textarea name="textarea1" rows="5"></textarea> 
     <br/> 
     <input type="SUBMIT" value="Submit"/> 
    </form>  

formAction.jsp

<% 

     String convert = request.getParameter("textarea1"); 
     PrintWriter wr = response.getWriter(); 
     File f =new File("file121.java"); 
     if(!f.exists()) 
     { 
      f.createNewFile(); 
      wr.println("File is created\n"); 

     } 
     FileWriter write = new FileWriter(f); 
     BufferedWriter bf = new BufferedWriter(write); 
     bf.write(convert); 
     bf.close(); 
     wr.println("File writing done\n"); 

     JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
     int result = compiler.run(null,null,null,"file121.java"); 
     if(result==0){ 
      wr.println("Compilation Successful"); 
     } 
     else{ 
      wr.println("Compilation Failed"); 
     } 




    %> 
+12

これはあらゆるレベルで間違っています。あなたはこれをしてはいけません。 – duffymo

+1

スクリプトレットは悪い考えです。人々がソースを投稿してJSPでコンパイルできるようにしようとしていますか?申し訳ありませんが、JSPをそのまま使用したことはありません。私はもはやJSPを使用しない - 90年代も。 – duffymo

+0

これは本当に非常に奇妙です。少し前に戻って質問を更新して、達成しようとしていることを確認できますか? –

答えて

12
  1. あなたは、JSPから呼び出すことができるJavaコードを記述し、スクリプトレットを使用しないでくださいような何かをしたいです。
  2. Javaにはクラス名のファイル名が必要ですが、これはおそらく主な問題でした。
  3. ユーザーが入力できるJavaコードの予想される形式は何ですか?方法、クラス、またはメソッド内のスクリプトのみ?
  4. あなたのレベルのJava知識で、未知のユーザーにコードを入力されないようにしてください。あなたのサーバーはすぐにハックされます

次のコードは、変数convertのコードをコンパイルします。自動的に入力されたクラスの名前が検出されます。クラスが見つからない場合、クラス名MyClassを持つテンプレートが作成されます。

 String convert = "public class NewClass { public static void main(String[] args) { System.out.println(\"test\"); }}"; 
    String filename = "MyClass.java"; 

    int i = convert.indexOf(" class "); 
    if(i == -1) { 
    convert = "public class MyClass { " + convert + " } "; 
    } else { 
    int classNameIndex = convert.indexOf(" ", i+1); 
    int classNameIndexEnd = convert.indexOf(" ", classNameIndex+1);   
    filename = convert.substring(classNameIndex+1, classNameIndexEnd) + ".java"; 
    } 

    PrintWriter wr = response.getWriter(); 
    File f = new File(filename); 
    if (!f.exists()) { 
    f.createNewFile(); 
    wr.println("File is created\n"); 

    } 
    FileWriter write = new FileWriter(f); 
    BufferedWriter bf = new BufferedWriter(write); 
    bf.write(convert); 
    bf.close(); 
    wr.println("File writing done\n"); 

    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
    int result = compiler.run(null, null, null, filename); 
    if (result == 0) { 
    wr.println("Compilation Successful"); 
    } else { 
    wr.println("Compilation Failed"); 
    } 
1

あり、このシナリオを実装するにはいくつかの方法がありますが、我々は、むしろ同じのための式言語(EL)を使用するか、私たちも、私たちのカスタム機能用のカスタムJSPタグを記述することができJSPでJavaコードを含めることはできません。このリンクは、このプロセスについて多くのことを説明します。

http://www.journaldev.com/2099/jsp-custom-tags-example-tutorial

あなたは教科書を通過好きならにもかかわらず、その後、ヘッドファーストサーブレットとJSPは詳細にこの全体のコンセプトを説明し、エレガント。だから適切な機能の情報を持っているために、この本は本を持っている必要があります。

ハッピーラーニング..

関連する問題