狂信者を「複製」するすべての人にとって、ここにSOに関する同様の質問があります。違いは、出力が理解できない鮮やかな例を描いていることです。
JspWriterとPrintWriterのドキュメントには、2つの違いがあると記載されています。1。JspWriterは例外をスローできますが、PrintWriterは例外をスローしないでください。2. JspWriterはバックグラウンドでPrintWriterを使用しますが、デフォルトではJSPページがバッファリングされるためthe buffer is flushed
、JSPページのコンテキストで意味するものが何であれ、PrintWriterは作成されません。この最後の部分を理解したかどうかはわかりません。この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宣言の前の最初の行として送信されます。したがって、上記の例では、正確に何が起こりますか?