Java 소스 코드를 빌드 한 다음 리플렉션을 사용하여 Java 클래스를로드 할 수 있습니다. 따라서, (이미 DB 연결을 만든 가정) getJar
를 호출하여 HTTP 서버에 새로운 서블릿을 추가하여 doGet
방법에 다음을 넣어 :
File tmp = File.createTempFile("java-code-", ".java");
PrintWriter out = new PrintWriter(new FileWriter(tmp), true);
String classname = tmp.getName().substring(0, tmp.getName().length()-5);
out.println("public class " + classname);
out.println("{");
out.println(" public static void executeCode()");
out.println(" {");
out.println(connection.executeQuery("SELECT java-code FROM yourDb WHERE name='"
+ request.getParameter("name").replace("'", "''") + "';");
out.println(" }");
out.println("}");
out.close();
Runtime.getRuntime().exec("javac \"" + tmp.getAbsolutePath() + "\"").waitFor();
Runtime.getRuntime().exec("jar cfe \"" + tmp.getAbsolutePath() + ".jar\" \""
+ classname + "\" \"" + tmp.getAbsolutePath() + "\"");
InputStream in = new InputStream(new FileInputStream(tmp.getAbsolutePath() + ".jar"));
int read; byte[] buf = new byte[4096];
while ((read = in.read(buf)) != null)
response.getOutputStream().write(buf, 0, read);
in.close();
을 지금, 당신은 그것을받을과를 만들 수 있습니다 ClassLoader
을 입력 한 다음 실행하십시오.
ClassLoader cl = new URLClassLoader("http://localhost/getJar?name=whatever");
Class c = cl.loadClass(classname);
c.getMethod("executeCode").invoke(null);
데이터베이스에 소스 코드 또는 바이트 코드가 포함되어 있습니까? – msrd0
db의 코드로 동적으로 Java 클래스를 빌드 한 다음 실행할 수 있습니다. – brso05
@ msrd0 - 소스 코드 – user3760419