когда происходит фиксация или сброс ответа сервлета?


Согласно javadoc:

В-request.getRequestDispatcher("/Test").forward(request,response);

Переадресация должна быть вызвана до того, как ответ был зафиксирован в клиент (до того, как вывод тела ответа был промыт).Незафиксированный вывод в буфере ответов автоматически очищается перед пересылкой.

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

- это запись в println из printwriter.

2 2

2 ответа:

Вызов flush() на PrintWriter фиксирует ответ.

forward метод позволяет одному сервлету выполнять предварительную обработку запроса, а другому ресурсу-генерировать ответ.

Вы можете иметь много операторов out.write перед пересылкой, но вы не можете вызвать flush перед пересылкой. как

PrintWriter out = response.getWriter();
out.write("forwarding...\n");
rd.forward(request, response); //this is good

Но если

out.write("forwarding...\n");
 out.flush();
 rd.forward(request, response); //this throws an exception

Нет, это не так. Просто, когда вы стираете его вручную в своем коде, например

response.flush().

Обычно контейнер сервлета делает это за вас после" вашего " метода.