servlet向浏览器显示控制台值

时间:2014-02-11 04:49:26

标签: java servlets terminal

我有一个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_;
}

1 个答案:

答案 0 :(得分:1)

好像你想将shell命令的输出打印到浏览器,所以我建议你可以尝试:

  1. 从http响应对象获取输出流。
  2. 以ostrm的身份将O传递到SyncPipe。
  3. 在p.waitFor()。
  4. 之后刷新O.

    只需替换这两行:

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

    我目前没有运行代码的环境,但我认为此更改应该有效。如果您遇到任何问题,请随时回复。

相关问题