Java 向浏览器显示控制台值的servlet

Java 向浏览器显示控制台值的servlet,java,servlets,terminal,Java,Servlets,Terminal,我有一个servlet程序(从一个朋友那里得到的),它正在执行一些命令提示符命令,并在控制台中重新执行输出。现在我想在我的浏览器中看到所有多行控制台输出行,我该怎么做 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String[] command = {

我有一个servlet程序(从一个朋友那里得到的),它正在执行一些命令提示符命令,并在控制台中重新执行输出。现在我想在我的浏览器中看到所有多行控制台输出行,我该怎么做

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命令的输出打印到浏览器,因此我建议您可以尝试:

  • 从http响应对象获取输出流O
  • 将O作为OSTM传递到同步管道中
  • 在p.waitFor()之后刷新O
  • 只需替换这两行:

    new Thread(new SyncPipe(p.getErrorStream(), response.getOutputStream())).start();
    new Thread(new SyncPipe(p.getInputStream(), response.getOutputStream())).start();
    

    我现在没有运行您的代码的环境,但我认为这种更改应该可以工作。如果您有任何问题,请随时回复。

    好的,我好像做错了什么,您能用代码显示吗?