Как в сервлетах out.println
записывает html-текст в объект ответа контейнера, где обычно в System.out.println()
, он записывает текст в консоль ??понимание out.println в сервлетах
Это создает проблему для меня концептуально.
Как в сервлетах out.println
записывает html-текст в объект ответа контейнера, где обычно в System.out.println()
, он записывает текст в консоль ??понимание out.println в сервлетах
Это создает проблему для меня концептуально.
Ни PrintStream
, ни PrintWriter
не указаны в терминах консоли.
PrintStream добавляет функции к другому потоку вывода, а именно к возможности печатать представления различных значений данных. PrintStream
Печать отформатированных изображений объектов в поток текстового вывода. PrintWriter
Они оба касаются форматирования данных и передачи отформатированных данных в выходной поток. Любой выходной поток. По умолчанию в определенных средах объекты PrintStream
, на которые первоначально ссылаются каждый из System.out
и System.err
, отправляют свои данные на консоль, но это только те конкретные экземпляры.
Даже те могут быть изменены. Например, в некоторых типах тестирования может быть полезно заменить System.out
на PrintStream
, который отправляет свои данные в ByteArrayOutputStream
.
Он использует ServletOutputStream
из Javadoc,
Обеспечивает выходной поток для передачи двоичных данных клиента. Объект
ServletOutputStream
обычно извлекается с помощью методаServletResponse.getOutputStream()
.
Если вы посмотрите на System.out
вы можете увидеть, что это PrintStream
, который другая реализация OutputStream
.
не в сервлетах ссылка на класс PrintWriter, который мы получаем через объявление PrintWriter out = response.getwriter() в коде сервлетов? – awhitesong
@awhitesong Это зависит полностью от базового 'OutputStream', который печатает' PrintWriter'. В случае «сервлета», который печатает на «OutputStream», с которым я связан в своем ответе. Кроме того, 'System.out' не является« PrintWriter ». –
Если какое-либо место в сервлетах вызывает обращение к объекту ответа out.println(...)
, то out
должен быть ссылкой на объект ответа OutputStream
или поток обертки и его. Если System.out
отправляет выходные данные где-то еще (как обычно, это будет делать), то это ссылка на другой OutputStream
.
Локальная переменная метода сервлетов (или любого другого метода) с именем out
полностью не связана с System.out
, что позволяет вам инициализировать ее как ссылку на другую.
Вывод в сервлетах относится к классу PrintWriter, а println() PrintWriter или PrintStream PrintStream обычно записывает на консоль вправо? – awhitesong
** Нет общих «выходов в сервлетах» **. Если неквалифицированный 'out' имеет смысл в некотором методе некоторого сервлета, то это, вероятно, локальная переменная, хотя она также может быть переменной экземпляра или класса конкретного сервлета класс реализации. Такая переменная относится к какому-либо объекту, если таковой имеется, к последнему заданному. В моем сервлете он, вероятно, будет инициализирован, чтобы ссылаться на выходной поток текущего объекта ServletResponse. –
Итак, к какому классу выходного потока выполняется печать данных форматированных данных в случае, если system.out печатает на консоль, как это делает ServletOutputStream в сервлетах? – awhitesong
@awhitesong Каждому 'PrintStream' сообщается о его выходном потоке в качестве параметра конструктора. См. Документацию, на которую я ссылался выше. –