Java 向浏览器显示控制台值的servlet
我有一个servlet程序(从一个朋友那里得到的),它正在执行一些命令提示符命令,并在控制台中重新执行输出。现在我想在我的浏览器中看到所有多行控制台输出行,我该怎么做Java 向浏览器显示控制台值的servlet,java,servlets,terminal,Java,Servlets,Terminal,我有一个servlet程序(从一个朋友那里得到的),它正在执行一些命令提示符命令,并在控制台中重新执行输出。现在我想在我的浏览器中看到所有多行控制台输出行,我该怎么做 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] command = {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String[] command =
{
"zsh",
};
Process p = Runtime.getRuntime().exec(command);
new Thread(new SyncPipe(p.getErrorStream(), System.err)).start();
new Thread(new SyncPipe(p.getInputStream(), System.out)).start();
PrintWriter stdin = new PrintWriter(p.getOutputStream());
stdin.println("source ./taxenv/bin/activate");
stdin.println("python runner.py");
// write any other commands you want here
stdin.close();
int returnCode = 0;
try {
returnCode = p.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} System.out.println("Return code = " + returnCode);
}
class SyncPipe implements Runnable
{
public SyncPipe(InputStream istrm, OutputStream ostrm) {
istrm_ = istrm;
ostrm_ = ostrm;
}
public void run() {
try
{
final byte[] buffer = new byte[1024];
for (int length = 0; (length = istrm_.read(buffer)) != -1; )
{
ostrm_.write(buffer, 0, length);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private final OutputStream ostrm_;
private final InputStream istrm_;
}
似乎您想将shell命令的输出打印到浏览器,因此我建议您可以尝试:
new Thread(new SyncPipe(p.getErrorStream(), response.getOutputStream())).start();
new Thread(new SyncPipe(p.getInputStream(), response.getOutputStream())).start();
我现在没有运行您的代码的环境,但我认为这种更改应该可以工作。如果您有任何问题,请随时回复。好的,我好像做错了什么,您能用代码显示吗?