从webapp执行外部Java程序

时间:2012-12-05 15:11:09

标签: java tomcat exec external processbuilder

我试图从运行在Tomcat 6,Windows 7,64bit上的servlet调用外部Java类文件。 关于这个主题已经有一些线索,但没有一个真正帮助我。

Fyi,如果我直接从shell运行它,我已经成功地做到了这一点。

我使用ProcessBuilder来执行这样的命令

 ProcessBuilder bp = new ProcessBuilder("cmd.exe","/C","java", "TheExternalClass", "ParameterA" });

我也在使用创建的Process中的errorStream和inputStream。

当我从servlet运行它时,它就会停转。

例如,如果我将java命令转换为dir,它确实按预期工作,这让我相信它与内存有关,或者从Tomcat启动新的Java进程或类似事件。

任何人都有指针或如何解决这个问题的好主意?

关于该主题的其他一些帖子:

http://www.javaworld.com/jw-12-2000/jw-1229-traps.html?page=1

call a java program from a webapp in tomcat server - the java program is out side of tomcat server

Tomcat fails to execute external java program

非常感谢阅读。

1 个答案:

答案 0 :(得分:1)

上面的代码可以工作,它不会阻止你的servlet。我的猜测是你稍后调用p.waitFor()或类似的东西,或者你在JSP线程中读取进程的输出流 - 将阻止

如果您不想阻止,您有两种选择:

  • 使用AJAX在后台轮询JSP。 JSP仍将阻止,但浏览器将可用。
  • 创建一个读取输出流的后台线程。这将使JSP立即返回,但您必须找到一种方法将流程结果发送到浏览器,因为它不知道服务器上发生了什么。