-4

使用java compiler API我想编译一个java filein jsp。我创建了一个 html 文件并使用它的textArea元素将其文本(预计是用户输入的 java 中的代码)发送到服务器上的 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>     

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




     %>   
4

2 回答 2

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");
  }
于 2016-04-15T11:55:34.083 回答
1

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

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

即使您喜欢阅读教科书,Head First Servlet 和 JSP 也会详细而优雅地解释整个概念。因此,为了获得适当的功能信息,这本书是一本必备的书。

快乐学习..

于 2016-04-19T11:29:19.137 回答