junior
Какая разница между JSPWriter и сервлетным PrintWriter
JspWriter и PrintWriter — оба используются для записи текстовых данных в HTTP-ответ, но JspWriter добавляет слой буферизации поверх PrintWriter.
| Критерий | JspWriter | PrintWriter |
|---|---|---|
| Буферизация | Да (буферизирует вывод перед отправкой) | Пишет напрямую в ответ |
| Получение | Неявный объект out на JSP |
response.getWriter() |
| Связь | Делегирует запись в PrintWriter |
Базовый поток |
| Переполнение буфера | Может выбросить IOException |
Нет буфера для переполнения |
JspWriter буферизирует вывод, что позволяет модифицировать HTTP-заголовки даже после начала записи контента (пока буфер не сброшен). Когда буфер заполняется или вызывается flush(), JspWriter передаёт данные в PrintWriter, который записывает их в HTTP-ответ.
Размер буфера задаётся директивой: <%@ page buffer="16kb" %> (по умолчанию 8 КБ). Значение buffer="none" отключает буферизацию, и JspWriter пишет напрямую через PrintWriter.
На собеседовании: ключевое —
JspWriterбуферизирует,PrintWriter— нет. Буферизация позволяет менять заголовки ответа (например, redirect) даже после начала вывода контента.