gpt4 book ai didi

Java Servlet - 导致空响应对象的观察者模式

转载 作者:行者123 更新时间:2023-11-29 03:35:24 25 4
gpt4 key购买 nike

我有一个 Java HttpServlet。该 servlet 包含一组使用观察者模式的对象,以便通过 servlet 的 Response 对象返回数据。这是我在 HttpServlet 中的 doGet() 方法的简化版本:

protected void doGet(final HttpServletRequest request, final HttpServletResponse response)
MyProcess process = new MyProcess();
// This following method spawns a few threads, so I use a listener to receive a completion event.
process.performAsynchronousMethod(request, new MyListener() {
public void processComplete(data) {
response.getWriter().print(data.toString());
}
}
}

如示例所示,我有一个要执行的进程,它会生成各种线程以生成最终数据集。此过程可能需要几秒到一分钟不等。我的问题是,似乎随着 doGet() 方法完成,响应对象变为空。当调用 processComplete() 时,响应对象将为空 - 从而阻止我写出任何数据。

似乎 servlet 在调用异步方法后立即关闭连接。

在使用观察者模式进行异步任务时,有没有更好的方法来实现这种类型的servlet?我应该以其他方式执行此操作吗?

最佳答案

servlet 响应将在 doGet 方法终止时发送回客户端,它也不会等待您的异步调用完成。您需要找到一种方法来阻塞,直到所有异步任务完成,然后才允许 doGet() 方法返回。

this question 的答案应该为您指明正确的方向。

还有一点需要注意的是,你不能保证线程会串联写入响应编写器,你可能会发现各种打印操作重叠,输出会出现乱码(这对你来说可能无关紧要,取决于数据是什么,以及将如何使用)

关于Java Servlet - 导致空响应对象的观察者模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15834382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com