【问题标题】:Java HttpServletRequest: Wait with repsonseJava HttpServletRequest:等待响应
【发布时间】:2013-10-11 04:30:38
【问题描述】:

也许这个问题有点误导,但我会解释我需要什么:

  1. 如果有一个通过 ajax / POST 调用的 Servlet。 Servlet 将获得一个 COM 端口读取器的实例,打开 COM 端口并向端口发送一个字符。到目前为止一切顺利。
  2. “端口读取器”有一个事件侦听器并等待来自端口的数据,如果数据可用,它将返回此数据。

我想要做的是等待 servlet 的 doPost 中的响应,直到数据到达并将此数据作为响应发送给客户端。

有什么想法吗?提前致谢。

【问题讨论】:

  • Servlet 3.0 在 Servlet 中增加了对异步处理的支持。搜索那个。

标签: java ajax jakarta-ee servlets


【解决方案1】:

Servlet 3.0 有asynchronous support in servlets。这样您就可以在 Servlet 中执行长时间运行的任务。

但是,请确保您的浏览器向服务器发出的请求保持打开状态,直到响应发送到客户端。

【讨论】:

    【解决方案2】:

    我不会尝试在 servlet 中等待某些数据,直到它可用后再发回。

    您必须记住,servlet 是在服务器从它管理的线程池中提供的自己的线程中执行的。所以想象一下,如果很多客户端几乎在同一时间发送这个POST 请求并且您的 servlet 开始等待,那么您可能会用完应用程序的线程。

    我会让POST 请求立即返回,并让另一个ajax GET 请求轮询servlet 以获取数据。你可以使用javascript的setInterval()来实现轮询。

    【讨论】:

    • 这正是 Servlet 3.0 规范在 Servlet 中增加了对异步处理的支持的原因:在 Servlet 中支持长时间运行的任务而不会耗尽线程。
    • 感谢您的回答。只有一个客户。我不考虑异步请求的原因是硬件通过 comport 与此应用程序通信,并且仅在客户端请求时才发送数据。客户端必须等待这个特定的答案,并根据硬件的答案向串行端口发送额外的请求。每次客户端/servlet 必须等待这个答案,然后提交并关闭请求。这就是为什么我想到一种事件监听器的原因。我目前的解决方案是在一个while循环中运行,以便com端口回答。
    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 2017-01-03
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多