有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基于servlet的Java编译器

我正在尝试创建一个在线编译器,它将代码作为网页中的字符串,并显示输出。我已经创建了一个servlet。用户将在名为“uName”的文本区域中输入程序代码。将输入作为字符串进行编译的代码如下

`enter code here`
/*
   * To change this template, choose Tools | Templates
      * and open the template in the editor.
 */
package Org.WebApplication1.test;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletException;
import java.io.IOException;

import java.lang.reflect.Method;
import java.net.URI;
import java.util.Iterator;
import java.util.NoSuchElementException;

import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.SimpleJavaFileObject;
import javax.tools.ToolProvider;

class CompileString {

    static String program;

    CompileString(String s)
    {

    program=s;
    }
  public static void main(String[] args) throws Exception {
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();


    Iterable<? extends JavaFileObject> fileObjects;
    fileObjects = getJavaSourceFromString(program);

    compiler.getTask(null, null, null, null, null, fileObjects).call();

    Class<?> clazz = Class.forName("Test");
    Method m = clazz.getMethod("main", new Class[] { String[].class });
    Object[] _args = new Object[] { new String[0] };
    m.invoke(null, _args);
  }

  static Iterable<JavaSourceFromString> getJavaSourceFromString(String code) {
    final JavaSourceFromString jsfs;
    jsfs = new JavaSourceFromString("code", code);
    return new Iterable<JavaSourceFromString>() {
      public Iterator<JavaSourceFromString> iterator() {
        return new Iterator<JavaSourceFromString>() {
          boolean isNext = true;

          public boolean hasNext() {
            return isNext;
          }

          public JavaSourceFromString next() {
            if (!isNext)
              throw new NoSuchElementException();
            isNext = false;
            return jsfs;
          }

          public void remove() {
            throw new UnsupportedOperationException();
          }
        };
      }
    };
  }
}

class JavaSourceFromString extends SimpleJavaFileObject {
  final String code;

  JavaSourceFromString(String name, String code) {
    super(URI.create("string:///" + name.replace('.', '/') + Kind.SOURCE.extension), Kind.SOURCE);
    this.code = code;
  }

  public CharSequence getCharContent(boolean ignoreEncodingErrors) {
    return code;
  }
}

/**
 *
 * @author RAJ
 */



public class ServletExample extends HttpServlet{







    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doGet(req, resp);



        String name=req.getParameter("uName");
        CompileString obj=new CompileString(name);
        String ip=req.getRemoteAddr();
        resp.getWriter().println("<html>");
        resp.getWriter().println("<head>");
        resp.getWriter().println("<tile>Respnse</title>");
        resp.getWriter().println("</head>");
        resp.getWriter().println("<body>");
        resp.getWriter().println("The output is "+obj);
        resp.getWriter().println("<br>");
        resp.getWriter().println("Your ip address is "+ip);
        resp.getWriter().println("</body>");
        resp.getWriter().println("</html>");


    }

}

我想显示CompileString类的输出,但我得到的输出是“Org.WebApplication.Test…@1bsvdg”


共 (0) 个答案