我正在尝试从运行在 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/