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

PrintWriter и ServletOutputStream — это два класса в Java Servlet API, используемых для записи данных в ответ сервлета, но они имеют разные предназначения и используются в разных ситуациях.

🚩Основные различия между `PrintWriter` и `ServletOutputStream`:

Тип данных:
🟠`PrintWriter`: Используется для записи текстовых данных. Поддерживает методы для работы с символами и строками.
🟠`ServletOutputStream`: Используется для записи бинарных данных. Поддерживает методы для работы с байтами.

Применение:
🟠`PrintWriter`: Идеально подходит для отправки текстовых данных, таких как HTML, XML, или JSON. Он предоставляет методы для удобной записи строк и символов.
     response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body><h1>Hello, World!</h1></body></html>");


🟠`ServletOutputStream`: Предназначен для отправки бинарных данных, таких как изображения, PDF-файлы или другие байтовые потоки. Он предоставляет методы для записи массивов байтов и отдельных байтов.
     response.setContentType("application/pdf");
ServletOutputStream out = response.getOutputStream();
byte[] pdfData = ...; // получить PDF данные
out.write(pdfData);


Комбинирование:
🟠`PrintWriter`: Нельзя использовать одновременно с ServletOutputStream в одном запросе, так как оба метода открывают ответный поток в разных режимах (символьный и байтовый).
🟠`ServletOutputStream`: Нельзя использовать одновременно с PrintWriter по той же причине.

Методы получения:
🟠`PrintWriter`: PrintWriter writer = response.getWriter();
🟠`ServletOutputStream`: ServletOutputStream outputStream = response.getOutputStream();

🚩Примеры:

Использование PrintWriter:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;

public class TextServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body><h1>Hello, World!</h1></body></html>");
}
}


Использование ServletOutputStream:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletOutputStream;

public class BinaryServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("application/pdf");
ServletOutputStream out = response.getOutputStream();
byte[] pdfData = ...; // получить PDF данные
out.write(pdfData);
}
}


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 6
  • 🤯 1
More from @easy_java_ru
  1. Oct 10, 2026🤔 На основании какой структуры данных реализован ArrayList? ArrayList реализован на базе…
  2. Oct 9, 2026🤔 Что такое «HTML»? HTML (HyperText Markup Language) — это язык разметки, используемый дл…
  3. Oct 9, 2026🤔 В чём различие между LeftJoin , RightJoin и InnerJoin? LEFT JOIN, RIGHT JOIN и INNER JO…
  4. Oct 8, 2026🤔 Что такое поток "демон"? Демон-поток — это поток, который: - Работает на фоне (например…
  5. Oct 7, 2026🤔 Может ли Entity-класс быть абстрактным? Да, Entity может быть абстрактным, если он служ…
  6. Oct 7, 2026🤔 К какой категории сущности относится Primary Key? Primary Key (первичный ключ) в базах…
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 →