¿Diferencia entre JspWriter y PrintWriter en Java EE?

Para todos ustedes "duplicados" fanáticos, hay una pregunta similar en SO rightaquí. La diferencia es que pinto un ejemplo vívido del que no puedo entender el resultado.

La documentación paraJspWriter yPrintWriter Dice que hay dos diferencias:1. JspWriter puede lanzar excepciones, PrintWriter no debe hacerlo.2. JspWriter usa un PrintWriter detrás de la escena, pero como las páginas JSP predeterminadas están en búfer, el PrintWriter no se creará hasta quethe buffer is flushed - lo que sea que eso signifique en el contexto de una página JSP. No estoy seguro de haber entendido esta última parte. Considere esta página 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>

Produce la siguiente salida:

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.

Como puede ver, el JspWriter envía su cadena al navegador donde esperaba. Pero PrintWriter emite su cadena antes de que todo lo demás se envíe al navegador. Si examinamos el código fuente enviado al navegador, la cadena de PrintWriter se envía como la primera línea, antes de la declaración DOCTYPE. Entonces, en el ejemplo de arriba, ¿qué sucede exactamente?

Respuestas a la pregunta(2)

Su respuesta a la pregunta