2016-04-12 22 views
-4

Mit java compiler API Ich möchte eine java file in jsp kompilieren. Ich erstellte eine HTML-Datei und mit seinem textArea Element schickte ich seinen Text, der Code in Java sein wird, der von Benutzer eingegeben wird, zu JSP auf dem Server und nach dem Sammeln in einer Zeichenfolge habe ich eine Datei mit .java Extension und schrieb es mit textArea Inhalt dann habe ich Compiler-API verwendet, aber es kompiliert die Datei nicht. Ich möchte etwas tun, wie thisWie kann ich `.java file` in jsp kompilieren?

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

Dies ist falsch auf jeder Ebene. Du solltest das nicht tun. – duffymo

+1

Scriptlets sind eine schlechte Idee, zum einen. Versuchen Sie, Benutzern zu erlauben, Quelltext zu posten und in Ihrer JSP zu kompilieren? Sorry, JSPs wurden nie auf diese Weise verwendet. Ich verwende JSPs überhaupt nicht mehr - zu 90s. – duffymo

+0

Das ist wirklich sehr seltsam. Könnten Sie ein wenig zurücktreten und Ihre Frage mit etwas Hintergrund aktualisieren, damit wir sehen können, was Sie erreichen möchten? –

Antwort

12
  1. Bitte verwenden Sie nicht Scriptlets, Java-Code schreiben, die Sie von Ihrem jsp aufrufen können.
  2. Java erfordert einen Dateinamen mit dem Namen der Klasse, das war wahrscheinlich Ihr Hauptproblem.
  3. Was ist das erwartete Format von Java-Code, den der Benutzer eingeben kann? Methode, Klasse oder nur ein Skript innerhalb einer Methode?
  4. Mit Ihrem Niveau von Java-Wissen, erlauben Sie bitte nicht, dass unbekannte Benutzer Code oder Ihren Server eingeben, der sehr bald gehackt wird!

Der folgende Code kompiliert den Code in variable convert. Es erkennt automatisch den Namen der eingegebenen Klasse. Wenn keine Klasse gefunden wurde, wird eine Vorlage mit dem Klassennamen MyClass erstellt.

 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

Es gibt mehrere Möglichkeiten, dieses Szenario Umsetzung aber wir dürfen nicht Java-Code enthalten in der JSPs eher Expression Language (EL) für das gleiche verwenden, oder wir können auch benutzerdefinierte jsp Tags für unsere benutzerdefinierte Funktionen schreiben. Dieser Link wird eine Menge über diesen Prozess erklären.

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

Obwohl, wenn Sie durch Text Bücher gehen mag dann Head First Servlets und JSP erklärt dieses ganze Konzept im Detail und elegant. Für richtig funktionierende Informationen ist dieses Buch ein Muss.

Happy Learning ..