如何在包含jsp后关闭输出流

时间:2010-05-06 16:35:52

标签: java ajax jsp

我有一个网页,它调用ajax来获取一些数据。这个数据需要很长时间来计算,所以我做的是第一个ajax服务器调用返回“loading ...”然后线程继续计算数据并将其存储在缓存中。 同时客户端javascript每隔几秒就用另一个ajax调用来检查,看看缓存是否已经加载。

这是我的问题,也可能不是问题。在初始ajax到服务器调用之后,我做了一个

...getServletContext().getRequestDispatcher(jsppath).include(request, response);

然后我使用该线程进行计算。我不介意用这个来绑定webserver线程,但我希望浏览器得到响应,而不是等待服务器关闭套接字。

我无法判断服务器是否在包含后关闭套接字,但我猜它不是。

那么在开始我的长时间计算之前,如何在写出我的回复之后强行关闭流?

我试过

o = response.getOutputStream();
o.close();

但是我得到了一个非法的状态异常,说输出流已经被获取(大概是由我包括的jsp)

所以我的问题:

  1. 是关闭套接字的网络服务器(我猜不是,因为你总是可以包含另一个jsp)

  2. 如果我假设没有关闭套接字,我该怎么做?

1 个答案:

答案 0 :(得分:2)

如果计算仍然在同一个线程中进行,我看不出如何关闭OutputStream。

您需要在新线程中开始计算,然后从Servlet返回,并且响应将自动发回。

如果你真的需要关闭作家,请执行此操作,

  response.getWriter().close();