Diferença entre JspWriter e PrintWriter no Java EE?
Para todos os "fanáticos" duplicados, há uma pergunta semelhante sobre o direito de SOAqui. A diferença é que eu pintei um exemplo vívido que eu não consigo entender a saída de.
A documentação paraJspWriter ePrintWriter diz que há duas diferenças:1 JspWriter pode lançar exceções, PrintWriter não deve fazer isso.2 O JspWriter usa um PrintWriter atrás da cena, mas como por padrão as páginas JSP são armazenadas em buffer, o PrintWriter não será criado atéthe buffer is flushed
- o que quer que isso signifique no contexto de uma página JSP. Não tenho certeza se entendi essa ú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>
Produz a seguinte saída:
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 você pode ver, o JspWriter envia sua string para o navegador onde eu esperava. Mas o PrintWriter envia sua string antes que todo o restante seja enviado para o navegador. Se examinarmos o código-fonte enviado ao navegador, a string do PrintWriter é enviada como a primeira linha, antes da declaração DOCTYPE. Então, no exemplo acima, exatamente o que acontece?