如何在jsp中编译我的`.java文件?

son*_*ony -4 java jsp online-compilation java-compiler-api

使用java compiler API我想编一个java filejsp.我创建了一个html文件并使用它的textArea元素我将其文本发送到服务器上的JSP,并将其收集到一个字符串中.java,textArea然后将其写入带有扩展名的文件,然后将其写入使用了编译器API,但它没有编译文件.我想要做的事像这样

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>     
Run Code Online (Sandbox Code Playgroud)

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");
        }




     %>   
Run Code Online (Sandbox Code Playgroud)

tak*_*shi 12

  1. 请不要使用scriptlet,编写可以从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");
  }
Run Code Online (Sandbox Code Playgroud)