jsp内置对象out方法 out.clear(),out.flush(),out.clearButtfer()的区别

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()则会显示内容。

转载:https://www.jianshu.com/p/3edfc8832971

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值