Как getWriter () работает в HttpServletResponse? - PullRequest
8 голосов
/ 15 апреля 2009

В методе service() мы используем

PrintWriter out = res.getWriter();

Скажите, пожалуйста, как он возвращает объект класса PrintWriter, а затем устанавливает соединение с браузером и отправляет данные в браузер.

Ответы [ 3 ]

11 голосов
/ 15 апреля 2009

не устанавливает соединение с браузером - браузер уже установил соединение с сервером. Он либо буферизует то, что вы записываете в память, а затем передает данные в конце запроса, либо проверяет, все ли заголовки записаны в сетевое соединение, а затем возвращает PrintWriter, который записывает данные непосредственно в это сетевое соединение ,

В сценарии буферизации может быть фиксированный размер буфера, и если вы превысите его, записанные данные будут «сброшены» в сетевое соединение. Большим преимуществом наличия буфера является то, что если что-то пойдет не так, вы можете изменить свой ответ на страницу с ошибкой. Если вы уже начали писать ответ, когда что-то идет не так, вы ничего не можете сделать, чтобы точно указать на ошибку.

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

0 голосов
/ 15 апреля 2009

Одна довольно простая реализация:

PrintWriter getWriter() throws java.io.IOException {
      return new PrintWriter(socket.getOutputStream());
}
0 голосов
/ 15 апреля 2009

Также обратите внимание, что доступно несколько реализаций API Servlet с открытым исходным кодом. Это позволяет увидеть, как это можно сделать.

Я полагаю, что официальная реализация также была с открытым исходным кодом и включена в сервер Glassfish.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...