我有一个 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?我应该以其他方式执行此操作吗?