我有一个网页,它调用ajax来获取一些数据。这个数据需要很长时间来计算,所以我做的是第一个ajax服务器调用返回“loading ...”然后线程继续计算数据并将其存储在缓存中。 同时客户端javascript每隔几秒就用另一个ajax调用来检查,看看缓存是否已经加载。
这是我的问题,也可能不是问题。在初始ajax到服务器调用之后,我做了一个
...getServletContext().getRequestDispatcher(jsppath).include(request, response);
然后我使用该线程进行计算。我不介意用这个来绑定webserver线程,但我希望浏览器得到响应,而不是等待服务器关闭套接字。
我无法判断服务器是否在包含后关闭套接字,但我猜它不是。
那么在开始我的长时间计算之前,如何在写出我的回复之后强行关闭流?
我试过
o = response.getOutputStream();
o.close();
但是我得到了一个非法的状态异常,说输出流已经被获取(大概是由我包括的jsp)
所以我的问题:
是关闭套接字的网络服务器(我猜不是,因为你总是可以包含另一个jsp)
如果我假设没有关闭套接字,我该怎么做?
答案 0 :(得分:2)
如果计算仍然在同一个线程中进行,我看不出如何关闭OutputStream。
您需要在新线程中开始计算,然后从Servlet返回,并且响应将自动发回。
如果你真的需要关闭作家,请执行此操作,
response.getWriter().close();