java - servlet 向浏览器显示控制台值

标签 java servlets terminal

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

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

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

只需替换这两行:

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

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

关于java - servlet 向浏览器显示控制台值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21693377/

相关文章:

java - jquery 表单提交到 servlet

java - 在 websphere 中将响应代码 403 替换为 404

Git 撤消命令 : "git reset --hard"

java - Spring Tomcat mvc api错误

Java - 如何制作可比较的字符串数组

java - 在部署中保留实体

java - 有没有一种方法可以在不使用 Servlet 功能的情况下获取 Web 应用程序的名称?

linux - 为什么 strace -f 在 | 之后无法跟踪 child 的进度?

javascript - Node-webkit 应用程序与终端对话

java - Java 中类似于 Criterium 的 BenchMark 框架