TGViewer
Java | Вопросы собесов Java | Вопросы собесов @easy_java_ru · 11.3K subscribers
Post #376 4.91K
📌 В чем разница между PrintWriter и ServletOutputStream ?

💬 Спросят с вероятностью 6%

PrintWriter и ServletOutputStream - это два различных класса, используемых для отправки данных от сервлета к клиенту. Они предназначены для работы с различными типами данных и имеют свои особенности. Вот основные различия между ними:

1️⃣ Тип данных

➕ `PrintWriter`:

Используется для отправки текстовых данных (символов) и поддерживает методы для форматирования текстовых данных, такие как print(), println(), и printf().

➕ ServletOutputStream:

Используется для отправки бинарных данных (байтов) и поддерживает методы для записи байтовый данных, такие как write(int b) и write(byte[] b, int off, int len).

2️⃣ Назначение

➕ PrintWriter:

Предназначен для отправки текстового содержимого, такого как HTML, JSON, XML и другие текстовые форматы. Пример использования: отправка HTML-страницы или текстового сообщения.

➕ ServletOutputStream:

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

3. Примеры:

С PrintWriter
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/textResponse")
public class TextResponseServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");

PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>Hello, World!</h1>");
out.println("</body></html>");
}
}


С ServletOutputStream
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

@WebServlet("/binaryResponse")
public class BinaryResponseServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=example.jpg");

try (FileInputStream fileInputStream = new FileInputStream("/path/to/example.jpg");
OutputStream outputStream = response.getOutputStream()) {

byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
}
}


-let.http.HttpServletReq


➕ Не поддерживает установку кодировки символов напрямую, так как работает с байтами.

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

Важные моменты

1️⃣ Исключительное использование:

➕ В одном ответе нельзя одновременно использовать PrintWriter и ServletOutputStream. Попытка сделать это приведет к исключению IllegalStateException.

2️⃣ Настройка содержимого:

➕ Перед получением PrintWriter или ServletOutputStream необходимо правильно настроить тип содержимого (Content-Type) и, если необходимо, кодировку (Character Encoding).

➕ PrintWriter: Используется для отправки текстовых данных и предоставляет удобные методы для работы с текстом.

➕ iter и ServletOutputStr Используется для отправки бинарных данных и предоставляет методы для записи байтов.

Выбор между PrintWriter и ServletOutputStream зависит от типа данных, которые нужно отправить клиенту.

🔥 ТОП ВОПРОСОВ С СОБЕСОВ

🔒 База собесов | 🔒 База тестовых
  • 👍 6
  • 🤯 1
More from @easy_java_ru
  1. Oct 11, 2026🤔 Чем отличается where от having ? WHERE и HAVING используются для фильтрации записей, но…
  2. Oct 10, 2026🤔 На основании какой структуры данных реализован ArrayList? ArrayList реализован на базе…
  3. Oct 9, 2026🤔 Что такое «HTML»? HTML (HyperText Markup Language) — это язык разметки, используемый дл…
  4. Oct 9, 2026🤔 В чём различие между LeftJoin , RightJoin и InnerJoin? LEFT JOIN, RIGHT JOIN и INNER JO…
  5. Oct 8, 2026🤔 Что такое поток "демон"? Демон-поток — это поток, который: - Работает на фоне (например…
  6. Oct 7, 2026🤔 Может ли Entity-класс быть абстрактным? Да, Entity может быть абстрактным, если он служ…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →