0

我有一个 Web 应用程序 (JSP/Servlets),我需要从中调用 Web 服务以获取响应。由于 Web 服务大约需要 4 到 5 分钟来发送响应,因此应用程序被冻结,不允许用户在应用程序上执行任何操作。

要解决此问题,我需要将 Web 服务调用委托给外部独立应用程序的线程,以便 Web 服务调用变为异步。有了这个,我有几个问题:

  1. 从带有参数的 servlet 调用主程序的最佳方法是什么。我正在考虑使用 Runtime 对象的 exec() 方法来调用 .bat 文件。还有什么比这更好的吗?

  2. 我想为每个请求在主程序上启动一个线程。但是为每个请求调用主程序每次都会启动 JVM(这可能是昂贵的资源)。是否可以检查主线程是否正在运行,如果是,则在同一个主线程上启动新线程,而不是再次调用主程序。

谁能让我知道处理这个问题的最佳和非昂贵的方法是什么?

提前致谢。

4

2 回答 2

1

从带有参数的 servlet 调用主程序的最佳方法是什么。我正在考虑使用 Runtime 对象的 exec() 方法来调用 .bat 文件。还有什么比这更好的吗?

取而代之的是,IMO,您在 Web 应用程序中创建一个线程类并在其中并行执行 Web 服务调用

此外,如果您使用的是Servlet3 API,那么API 规范引入的新异步支持可能会有所帮助

于 2013-06-12T06:44:16.067 回答
1

有一个 Queue 或者更好的是有一个 MessageBroker 来在你的 Web 应用程序本身中提交 Web 服务调用请求,并向用户返回一个唯一的 id。

有一个线程来监视上述 Queue 或 MessageBroker 并将项目出列并生成线程,这些线程将调用 Web 服务并等待其响应,然后将其放入另一个 Queue 或 MessageBroker 或相同状态为完成的状态。

为用户提供 UI 以输入唯一 ID 并检索 Web 服务调用的结果。

这样您就不必创建进程并且可以使用线程管理所有内容。创建进程非常耗时,黑客可以利用您创建进程的设计来降低您的服务器速度,或者更糟地使服务器崩溃,方法是循环发送请求。

于 2013-06-12T06:44:28.583 回答