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