out对象中的clear()
,flush()
,clearBuffer()
都是清楚缓存区用的。
缓冲区用来缓存即将输出到页面的数据。
下面我们来比较这三个方法的不同之处。验证使用request对象的isCommit()
方法判断服务端是否把缓冲区数据传送到客户端。
out.clear()是直接清空缓冲区数据,不输出到客户端且刷新缓存时抛出异常
<%--
Created by IntelliJ IDEA.
User: Iverson3
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>problem test page</title>
</head>
<body>
<p> HELLO</p>
<%
StringBuffer str = new StringBuffer("hello");
out.print(str);
out.clear();
if (response.isCommitted()){
out.print("TRUE");
}
else {
out.print("FALSE");
}
%>
</body>
</html>
输出截图:
可以看到原本应该输出的HELLO没有输出,title标签中的标题也没了。
我们再将out.clear()与out.print(str)调换顺序,此时可以输出hello。
isCommit()输出false。
out.flush()先输出缓冲区数据再清空。
<%--
Created by IntelliJ IDEA.
User: Iverson3
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<html>
<head>
<title>我是Title</title>
</head>
<body>
<p>HELLO</p>
<%
out.print("0这行?");
out.flush();
out.print("1这行有吗????");
if (response.isCommitted()){
out.print("TRUE");
}
else {
out.print("FALSE");
}
%>
</body>
</html>
输出截图:
可以看到输出都有,isCommit返回true.
out.clearBuffer() 清空缓冲区,不输出到客户端
<%--
Created by IntelliJ IDEA.
User: Iverson3
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>我是Title</title>
</head>
<body>
<p>HELLO</p>
<%
out.print("0这行?");
out.clearBuffer();
out.print("1这行有吗????");
if (response.isCommitted()){
out.print("TRUE");
}
else {
out.print("FALSE");
}
%>
</body>
</html>
输出截图:
可以看到clearBuffer之前的都没输出,isCommit()输出false.
再clearBuffer之前加上flush()则会显示内容。