2014-11-05 5 views
1

Как в сервлетах out.println записывает html-текст в объект ответа контейнера, где обычно в System.out.println(), он записывает текст в консоль ??понимание out.println в сервлетах

Это создает проблему для меня концептуально.

ответ

3

Ни PrintStream, ни PrintWriter не указаны в терминах консоли.

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

Печать отформатированных изображений объектов в поток текстового вывода. PrintWriter

Они оба касаются форматирования данных и передачи отформатированных данных в выходной поток. Любой выходной поток. По умолчанию в определенных средах объекты PrintStream, на которые первоначально ссылаются каждый из System.out и System.err, отправляют свои данные на консоль, но это только те конкретные экземпляры.

Даже те могут быть изменены. Например, в некоторых типах тестирования может быть полезно заменить System.out на PrintStream, который отправляет свои данные в ByteArrayOutputStream.

+0

Итак, к какому классу выходного потока выполняется печать данных форматированных данных в случае, если system.out печатает на консоль, как это делает ServletOutputStream в сервлетах? – awhitesong

+0

@awhitesong Каждому 'PrintStream' сообщается о его выходном потоке в качестве параметра конструктора. См. Документацию, на которую я ссылался выше. –

2

Он использует ServletOutputStream из Javadoc,

Обеспечивает выходной поток для передачи двоичных данных клиента. Объект ServletOutputStream обычно извлекается с помощью метода ServletResponse.getOutputStream().

Если вы посмотрите на System.out вы можете увидеть, что это PrintStream, который другая реализация OutputStream.

+0

не в сервлетах ссылка на класс PrintWriter, который мы получаем через объявление PrintWriter out = response.getwriter() в коде сервлетов? – awhitesong

+0

@awhitesong Это зависит полностью от базового 'OutputStream', который печатает' PrintWriter'. В случае «сервлета», который печатает на «OutputStream», с которым я связан в своем ответе. Кроме того, 'System.out' не является« PrintWriter ». –

0

Если какое-либо место в сервлетах вызывает обращение к объекту ответа out.println(...), то out должен быть ссылкой на объект ответа OutputStream или поток обертки и его. Если System.out отправляет выходные данные где-то еще (как обычно, это будет делать), то это ссылка на другой OutputStream.

Локальная переменная метода сервлетов (или любого другого метода) с именем out полностью не связана с System.out, что позволяет вам инициализировать ее как ссылку на другую.

+0

Вывод в сервлетах относится к классу PrintWriter, а println() PrintWriter или PrintStream PrintStream обычно записывает на консоль вправо? – awhitesong

+0

** Нет общих «выходов в сервлетах» **. Если неквалифицированный 'out' имеет смысл в некотором методе некоторого сервлета, то это, вероятно, локальная переменная, хотя она также может быть переменной экземпляра или класса конкретного сервлета класс реализации. Такая переменная относится к какому-либо объекту, если таковой имеется, к последнему заданному. В моем сервлете он, вероятно, будет инициализирован, чтобы ссылаться на выходной поток текущего объекта ServletResponse. –