Java 在浏览器中显示Sh脚本输出

Java 在浏览器中显示Sh脚本输出,java,browser,output,sh,Java,Browser,Output,Sh,我有一个webappliaction(在Jsp和Severlet中开发),它执行sh脚本并仅在执行脚本后在浏览器中显示输出,但我想打印输出,就像它在terminal中执行一样(例如ping命令,一个接一个)。这样,用户将有在unix终端中工作的体验。我的脚本将运行将近一分钟(用于启动和停止WAS服务器的脚本),因此用户不应该等到一分钟才看到最终输出。他们应该在启动流程后看到脚本启动输出。请在下面找到我的示例代码 pb = new ProcessBuilder("/bin/sh",script);

我有一个webappliaction(在Jsp和Severlet中开发),它执行sh脚本并仅在执行脚本后在浏览器中显示输出,但我想打印输出,就像它在terminal中执行一样(例如ping命令,一个接一个)。这样,用户将有在unix终端中工作的体验。我的脚本将运行将近一分钟(用于启动和停止WAS服务器的脚本),因此用户不应该等到一分钟才看到最终输出。他们应该在启动流程后看到脚本启动输出。请在下面找到我的示例代码

pb = new ProcessBuilder("/bin/sh",script);
            pb.directory(new File(filePath));
            p = pb.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line = null;
            while ((line = reader.readLine()) != null){
               System.out.println(line);
               out.println(line);
            }
            p.waitFor();
            System.out.println ("exit: " + p.exitValue());
            out.println("exit: " + p.exitValue());
            p.destroy();
            out.println("Script Executed");

请任何人指导我。

您的问题在代码示例中不可见,因为它在本地工作正常(例如,对于
System.out
)。因此,逻辑意味着问题一定在客户端和服务器之间的网络中的某个地方。您既不显示如何创建
out
(我猜它是某种套接字连接的
PrintStream
),也不显示JSP如何读取它。您想要的是某种AJAX方法(XmlHttpRequest或类似的方法),可能您不使用它,而是某种“天真”的老式方法。我不是网络开发者,但您最喜欢的搜索引擎或其他人可能会在这方面帮助您。

最后我找到了解决问题的方法,我只是在
out.flush()之后添加了
out.println(line)这样,每次在while循环中,它的刷新输出都会输出到浏览器,看起来就像unix终端。下面的代码发挥了神奇的作用

            pb = new ProcessBuilder("/bin/sh",script);
            pb.directory(new File(filePath));
            p = pb.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line = null;
            while ((line = reader.readLine()) != null){
               System.out.println(line);
               out.println(line);
               out.flush();
            }
            p.waitFor();
            System.out.println ("exit: " + p.exitValue());
            out.println("exit: " + p.exitValue());
            p.destroy();
            out.println("Script Executed");

非常感谢kriegaex,我通过在out.println(line)之后添加out.flush()解决了我的问题;