Unterschied zwischen JspWriter und PrintWriter in Java EE?
Für alle, die Sie Fanatiker "duplizieren", gibt es eine ähnliche Frage zu SO richtigHier. Der Unterschied ist, dass ich ein anschauliches Beispiel male, dessen Ausgabe ich nicht verstehen kann.
Die Dokumentation fürJspWriter undPrintWriter sagt, es gibt zwei Unterschiede:1. JspWriter kann Ausnahmen auslösen, PrintWriter sollte dies nicht tun.2. JspWriter verwendet einen PrintWriter im Hintergrund. Da JSP-Seiten jedoch standardmäßig gepuffert sind, wird der PrintWriter erst erstelltthe buffer is flushed
- was auch immer das im Kontext einer JSP-Seite bedeutet. Ich bin nicht sicher, ob ich diesen letzten Teil verstanden habe. Betrachten Sie diese JSP-Seite:
<%@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>
Es wird die folgende Ausgabe erzeugt:
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.
Wie Sie sehen können, gibt der JspWriter seine Zeichenfolge an den Browser aus, wo ich es erwartet habe. Aber PrintWriter gibt seinen String aus, bevor alles andere an den Browser gesendet wird. Wenn wir den an den Browser gesendeten Quellcode untersuchen, wird der PrintWriter-String als allererste Zeile vor der DOCTYPE-Deklaration gesendet. Was passiert im obigen Beispiel genau?