Встроенный ответ Jetty

Я использую встроенную версию причала. Я заметил следующее:

в методе обработчика, если я хочу напрямую ответить ответом HTTP OK, а затем спать в течение x секунд, обработчик делает обратное. Это нормально?

функция дескриптора следующая:

public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

response.setContentType("text/html;charset=utf-8");
            response.setStatus(HttpServletResponse.SC_OK);
            baseRequest.setHandled(true);
            response.getWriter().println("OK");

Thread.sleep(10000);

}

Ублюдок спит 10 секунд потом возвращает ответ, почему так происходит?


person GRIM    schedule 02.04.2012    source источник


Ответы (1)


Вам нужно позвонить

response.flushBuffer();

перед сном нить.

Из JavaDoc этого метода:

Принудительно записывает любое содержимое буфера клиенту. Вызов этого метода автоматически фиксирует ответ, то есть код состояния и заголовки будут записаны.

person jordeu    schedule 02.04.2012
comment
Я попробовал это, и я получил ответ OK, однако соединение не закрывается до тех пор, пока функция Thread.sleep() не будет выполнена. Я звоню по телнету, если честно. - person GRIM; 03.04.2012
comment
Я не знаю, как закрыть соединение до выхода из метода дескриптора. Но зачем ждать после закрытия соединения? Мне это кажется странным. - person jordeu; 03.04.2012
comment
О, хорошо, я просто добавил время ожидания в качестве примера некоторой операции, происходящей после отправки ответа. Ну что ж, в любом случае, спасибо, этого пока достаточно, мой друг! - person GRIM; 04.04.2012