У меня есть веб-страница, которая выполняет вызов ajax для получения некоторых данных. Эти данные требуют много времени для вычисления, поэтому то, что я сделал, было первым вызовом ajax-сервера, который возвращает «loading ...», а затем поток продолжает вычислять данные и сохранять их в кеше.
тем временем клиентский javascript проверяет каждые несколько секунд с помощью другого ajax-вызова, чтобы узнать, загружен ли кеш еще.
Вот моя проблема, и это не может быть проблемой. После первоначального призыва к серверу я делаю
...getServletContext().getRequestDispatcher(jsppath).include(request, response);
тогда я использую этот поток, чтобы сделать вычисления. Я не против связать поток веб-сервера с этим, но я хочу, чтобы браузер получил ответ, а не ждал, пока сервер закроет сокет.
Я не могу сказать, закрывает ли сервер сокет после включения, но я предполагаю, что это не так.
Так как я могу принудительно закрыть поток после того, как записал свой ответ, прежде чем начинать свои длинные вычисления?
Я пытался
o = response.getOutputStream();
o.close();
но я получаю исключение о недопустимом состоянии, сообщающее, что выходной поток уже получен (предположительно включенным jsp)
Итак, мои вопросы:
- веб-сервер, закрывающий сокет (я полагаю, нет, потому что вы всегда можете включить другой jsp)
если, как я предполагаю, не закрывать сокет, как мне это сделать?