【发布时间】:2012-10-23 11:20:11
【问题描述】:
对于所有“重复”的狂热分子,SO right here 上有一个类似的问题。不同的是,我画了一个生动的例子,我无法理解它的输出。
JspWriter 和PrintWriter 的文档说有两个区别:1. JspWriter 可以抛出异常,PrintWriter 不应该这样做。 2. JspWriter 在后台使用 PrintWriter,但由于默认情况下 JSP 页面是缓冲的,因此在 the buffer is flushed 之前不会创建 PrintWriter - 无论这在 JSP 页面的上下文中意味着什么。我不确定我是否理解了最后一部分。考虑这个 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 声明之前。那么在上面的例子中,究竟发生了什么?
【问题讨论】:
标签: jsp jakarta-ee buffer printwriter output