一、创建out.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<%
out.println("first line<br />");
response.getWriter().println("second line<br />");
%>
</body>
</html>
二、访问
http://localhost:8080/chapter06/out.jsp
网页源文件
second line<br />
<html>
<head>
<title>Insert title here</title>
</head>
<body>
first line<br />
</body>
</html>
从上图看出,out.println反而输出在后。out对象通过print写入数据后,直到整个jsp页面结束后,out对象中的缓冲区的数据才真正写入到Servlet引擎提供的缓冲区。而response.getWriter().println则直接把内容写入到Servlet引擎提供的缓冲区。Servlet引擎按缓冲区中的数据存放顺序输出内容。
三、源码分析
调试方式启动服务器,然后访问该jsp
jsp页面继续往下执行 ,都是执行out.writer,我们到out.println停下,进去看看
四、使用page指令设置out对象的缓冲区大小
从上面的源代码的这段代码
if (bufferSize == 0) {
initOut();
out.write(s, off, len);
return;
}
可以看出,只有我们设置缓冲区的大小为0,那么就会把数据写入到Servlet引擎提供的缓冲区。
如何设置呢?
<%@ page language="java" contentType="text/html; charset=UTF-8" buffer="0kb"%>
再次调试看看
说明设置有效。
请求处理完后