如何從java代碼本身運行編譯代碼(.class
)java?從java代碼運行.class文件
我正在做一種提供服務,如在服務器端編譯和運行java代碼並將輸出提供給最終用戶。
任何人都可以提出一個方法來實現這個目標嗎?
import java.io.*;
public class demo {
public static void main(String args[]) throws IOException, InterruptedException {
int result;
try {
System.out.println("command output:");
Process proc = Runtime.getRuntime().exec("java -cp . demoh");
InputStream in = proc.getInputStream();
result = proc.waitFor();
BufferedInputStream buffer = new BufferedInputStream(proc.getInputStream());
BufferedReader commandOutput = new BufferedReader(new InputStreamReader(buffer));
System.out.print(commandOutput);
String line = null;
try {
while ((line = commandOutput.readLine()) != null) {
System.out.print(line);
System.out.println("command output: " + line);
}//end while
commandOutput.close();
} catch (IOException e) {
//log and/or handle it
}
} catch (IOException e) {
System.err.println("IOException raised: " + e.getMessage());
}
}
}
*「我在做類似的服務,比如在服務器端編譯和運行java代碼,並給出最終用戶?」*不妨安裝tomcat並讓用戶訪問上傳servlet,這將是關於同樣的安全噩夢。事實上,想想看,如果你繼續這樣做,你不妨同時把鑰匙給你的房子。 ;) – 2012-04-20 16:12:36
@AndrewThompson可以在沙箱中運行它 – siamii 2012-04-20 16:23:11
@ bizso09確實如此,但那意味着許多有趣的代碼類型將無法運行。即使這樣,你也必須考慮編程錯誤('OutOfMemroyError','StackOverflowError',無限循環..)。事實上,一旦我有一個在線編譯器(無法運行代碼)。一位對我正在使用的編譯器有深入瞭解的人聯繫了並警告我完全基於***編譯***代碼的DOS攻擊。至少(至少很久以前)的代碼可能會使編譯器佔用30分鐘或更長的時間! – 2012-04-20 16:27:50