java - 从 webapp 执行外部 Java 程序

标签 java tomcat exec external processbuilder

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

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

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

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

我还从创建的进程中使用 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

感谢阅读。

最佳答案

上面的代码有效,它不会停止你的 servlet。我的猜测是您稍后调用 p.waitFor() 或类似的方法,或者您在 JSP 线程中读取进程的输出流 - 将阻塞。

如果你不想阻止,你有两个选择:

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

关于java - 从 webapp 执行外部 Java 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13726253/

相关文章:

java - TomEE 启动但 Netbeans 给出 "Failed to start"错误

java - WebDriverWait.until(ExpectedConditions.elementToBeClickable(someAjaxMagic)) 永远不会返回

java - Android - 如何以编程方式将证书存储在 keystore 中?

java - Kafka Producer 将消息从 XML 文件发布到 Kafka Topic

tomcat - 我的 cometd 过滤器应该使用哪个 servlet-api jar

t-sql - 将 EXEC 的结果处理到 OUTER APPLY 中

PHP 执行 linux 命令终止得太快?

php - 同时执行多个 Python 脚本导致 PHP/Apache 挂起

java - 为什么当我使用 BigDecimal 时它会不断舍入

Java 似乎不接受 Romance 作为时区别名。应该是什么?