Różnica między JspWriter a PrintWriter w Java EE?

Dla wszystkich „duplikatów” fanatyków istnieje podobne pytanie dotyczące praw autorskichtutaj. Różnica polega na tym, że maluję żywy przykład, którego nie rozumiem.

Dokumentacja dlaJspWriter iPrintWriter mówi, że istnieją dwie różnice:1 JspWriter może rzucać wyjątki, PrintWriter nie powinien tego robić.2. JspWriter używa PrintWriter za sceną, ale ponieważ domyślnie strony JSP są buforowane, PrintWriter nie zostanie utworzony, dopókithe buffer is flushed - cokolwiek to znaczy w kontekście strony JSP. Nie jestem pewien, czy zrozumiałem tę ostatnią część. Rozważ tę stronę 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>

Tworzy następujące dane wyjściowe:

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.

Jak widać, JspWriter wyprowadza swój ciąg do przeglądarki, gdybym tego oczekiwał. Ale PrintWriter wyprowadza swój łańcuch, zanim wszystko inne zostanie wysłane do przeglądarki. Jeśli zbadamy kod źródłowy wysłany do przeglądarki, ciąg PrintWriter zostanie wysłany jako pierwsza linia, przed deklaracją DOCTYPE. Więc w powyższym przykładzie, co dokładnie się dzieje?

questionAnswers(2)

yourAnswerToTheQuestion