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

如何在jsp中编译I`.java文件`?,java,jsp,java-compiler-api,online-compilation,Java,Jsp,Java Compiler Api,Online Compilation,我想使用java编译器API在jsp中编译一个java文件。我创建了一个html文件,并使用其textArea元素将其文本(预期是用户输入的java代码)发送到服务器上的JSP,在以字符串形式收集后,我创建了一个扩展名为.java的文件,并使用textArea内容编写了该文件,然后我使用了编译器API,但它没有编译该文件。我想做一些像 index.html 请不要使用Scriptlet,编写可以从jsp调用的java代码。 Java需要一个带有类名的文件名,这可能是您的主要问题。 用户可以输入的

我想使用java编译器API在jsp中编译一个java文件。我创建了一个html文件,并使用其textArea元素将其文本(预期是用户输入的java代码)发送到服务器上的JSP,在以字符串形式收集后,我创建了一个扩展名为.java的文件,并使用textArea内容编写了该文件,然后我使用了编译器API,但它没有编译该文件。我想做一些像

index.html

请不要使用Scriptlet,编写可以从jsp调用的java代码。 Java需要一个带有类名的文件名,这可能是您的主要问题。 用户可以输入的java代码的预期格式是什么?方法、类还是仅方法内的脚本? 以您的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");
  }

有几种方法可以实现这个场景,但是我们不能在jsp中包含Java代码,而应该使用表达式语言EL实现同样的功能,或者我们甚至可以为自定义功能编写自定义jsp标记。这个链接将解释很多关于这个过程的内容

尽管您喜欢阅读课本,但HeadFirstServlet和JSP详细而优雅地解释了整个概念。因此,为了获得正确的功能信息,这本书是一本必备书


快乐学习..

这在各个层面都是错误的。你不应该这样做。比如说,脚本是个坏主意。您是否试图允许人们发布源代码并在JSP中编译它?对不起,从来没有这样使用过JSP。我再也不使用JSP了——太90年代了。学到的第一课:不要指导客户机做任何繁重的工作。我曾经有一个在线编译器。一位深入维护Java编译器的人士警告说,有一些短代码示例可能会占用编译器30分钟或更长时间。我把它从公众视线中移开了。我认为@duffymo和其他人在评论中的观点是一个很好的线索。不要这样做。请打开问题中提到的链接。。我不是在跟踪一个与SO无关的链接。顺便说一句,仅仅因为有人做了某事,并不一定就是一个“好主意”。
 <%

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




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