Разница между JspWriter и PrintWriter в Java EE?

Для всех вас, «дублирующих» фанатиков, есть аналогичный вопрос о правильномВот, Разница в том, что я рисую яркий пример, который я не могу понять вывод.

Документация дляJspWriter а такжеPrintWriter говорит, что есть два различия:1. JspWriter может выдавать исключения, PrintWriter не должен этого делать.2. JspWriter использует PrintWriter за сценой, но, поскольку по умолчанию страницы JSP буферизуются, PrintWriter не будет создан доthe buffer is flushed - что бы это ни значило в контексте страницы JSP. Я не уверен, что понял эту последнюю часть. Рассмотрим эту страницу JSP:

<%@page import="java.io.PrintWriter"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JspWriter versus PrintWriter</title>
    </head>
    <body>
        <p>I should be row one.</p>
        <%
            out.println("<p>JspWriter said: I should be the second row.</p>");

            PrintWriter pw = response.getWriter();
            pw.println("<p>PrintWriter said: I should be the third row.</p>");
        %>
        <p>I should be the fourth row.</p>
    </body>
</html>

Он производит следующий вывод:

PrintWriter said: I should be the third row.
I should be row one.
JspWriter said: I should be the second row.
I should be the fourth row.

Как видите, JspWriter выводит свою строку в браузер, где я и ожидал. Но PrintWriter выводит свою строку до того, как все остальное будет отправлено в браузер. Если мы рассмотрим исходный код, отправленный в браузер, строка PrintWriter будет отправлена как самая первая строка, до объявления DOCTYPE. Так что в примере выше, что именно происходит?

Ответы на вопрос(2)

Ваш ответ на вопрос