希望从struts2网页动态执行java类(包含main)

希望从struts2网页动态执行java类(包含main),java,struts2,Java,Struts2,我想在Struts2.0中创建一个网页,其中包含一个textarea、一个属性字段和submit按钮。用户将在此文本区域输入java代码,我的代码将编译并执行它,并在我的属性字段中给出此代码的结果。。。上述代码在独立应用程序中运行良好。但它在我的web应用程序中没有显示任何内容。请任何人都可以解决它。。。提前谢谢 package org.controller; import com.opensymphony.xwork2.ActionSupport; import java.io.Buffe

我想在Struts2.0中创建一个网页,其中包含一个textarea、一个属性字段和submit按钮。用户将在此文本区域输入java代码,我的代码将编译并执行它,并在我的属性字段中给出此代码的结果。。。上述代码在独立应用程序中运行良好。但它在我的web应用程序中没有显示任何内容。请任何人都可以解决它。。。提前谢谢

package org.controller;

import com.opensymphony.xwork2.ActionSupport;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStreamReader;



public class JCompilerAction extends ActionSupport 
{


String program;

String MSg;
public JCompilerAction() {
}
public String getProgram() {
    return program;
}
public void setProgram(String program) {
    this.program = program;
}
public String getMSg() {
    return MSg;
}
public void setMSg(String MSg) {
    this.MSg = MSg;
}
public String Compile() {
    try {
        byte[] bFile = program.getBytes();
        File f = new File("D:/nullprog.java");
        FileOutputStream fileOuputStream = new FileOutputStream(f);
        fileOuputStream.write(bFile);
        fileOuputStream.close();
        Process p1 = Runtime.getRuntime().exec("javac  D:/nullprog.java");
        BufferedReader in = new BufferedReader(new InputStreamReader(p1.getErrorStream()));
        String line = null;
        boolean isError = false;
        while ((line = in.readLine()) != null) {
            MSg = line;
            isError = true;
            return SUCCESS;
        }
        p1.waitFor();
        if (!isError) 
        {
            Process p2 = Runtime.getRuntime().exec("cmd /c start nullprog");
            BufferedReader in1 = new BufferedReader(new InputStreamReader(p2.getInputStream()));
            String line1 = null;
            while ((line1 = in1.readLine()) != null) {
                MSg += line1;
            }
            return SUCCESS;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return SUCCESS;
}
public String execute() {
    return SUCCESS;
}
}

下面是一个简单的程序,它首先编译代码,然后执行代码:

Executer.java

为了简单起见,这两个类都在同一个包中。当我执行Executer类时,它首先编译MyClass.java,然后运行main方法


如果您的要求是将Java文件放在项目外的某个文件夹中,则要加载编译器类文件,您需要按照回答中所述的操作。

什么是“不显示任何内容”?。请更具描述性。当我在我的文本区域中写入错误的codesyntax错误时,我的编译器代码会对其进行编译,并在我的属性字段中显示相应的错误消息,即上述代码中的MSg,但当我写入正确的语法时,此代码不会生成输出。。。它也不会在日志中给出任何错误消息。。。同样的代码在独立模式下执行得很好…你为什么不试试呢?你能给我推荐一些示例代码吗。。。我试过很多密码。。。其中一些在独立模式下工作,但当我当时将它们放在struts2 appn中时,它们不工作。。。我想我无法在web应用程序中实现它们。。。这是一个例子
import java.lang.reflect.Method;

public class Executer {
    public static void main(String args[]) {
        try{
            java.lang.Process p1 = Runtime.getRuntime().exec("javac  MyClass.java");
            p1.waitFor();
            Class<?> c = Class.forName("MyClass");
            Object obj = c.newInstance();
            Method[] mArr = obj.getClass().getMethods();
            for(Method m : mArr){
                if(m.getName().equalsIgnoreCase("main")){
                    m.invoke(obj, new Object[]{new String[]{}});
                }
            }
        } catch (Exception e){
            e.printStackTrace();
        }
    }
}
import javax.swing.JOptionPane;

public class MyClass {
    public static void main(String[] args) {
        JOptionPane.showMessageDialog(null, "Hii");
    }
}